>

기존 RDD에서 일부 데이터 (모두가 아님)를 캡처 한 다음 실제 작업을 위해 다른 스칼라 클래스로 전달하는 시나리오가 있습니다. 텍스트 파일에서 data (empnum, empname, emplocation, empsal)를 예제로 볼 수 있습니다.

11,John,Paris,1000
12,Daniel,UK,3000

첫 번째 단계에서는 아래 코드를 사용하여 RDD [String]을 사용하여 RDD를 만듭니다.

val empRDD = spark
  .sparkContext
  .textFile("empInfo.txt")

그래서 내 요구 사항은 empnum, empname, emplocation (RDD [String]과 함께)으로 다른 RDD를 작성하는 것입니다. 이를 위해 아래 코드를 시도 했으므로 RDD [String, String, String]가 표시됩니다.

val empReqRDD = empRDD
  .map(a=> a.split(","))
  .map(x=> (x(0), x(1), x(2)))

슬라이스로 시도했지만 RDD [Array (String)]를 제공합니다. 필요한 RDD는 RDD [String]이어야하며 일부 작업을 수행하려면 필수 Scala 클래스에 전달해야합니다.

예상되는 출력은

11,John,Paris
12,Daniel,UK

누구든지 달성하는 방법을 도와 줄 수 있습니까?


  • 답변 # 1

    나는 이것을 시도 할 것이다

    val empReqRDD = empRDD
      .map(a=> a.split(","))
      .map(x=> (x(0), x(1), x(2)))
    val rddString = empReqRDD.map({case(id,name,city) => "%s,%s,%s".format(id,name,city)})
    
    

  • 답변 # 2

    함께 시도 flatMap 변환.

    empRDD.map(a => a.split(",")).flatMap(x => x).collect()
    // Array[String] = Array(11, John, Paris, 1000, 12, Daniel, UK, 3000)
    empRDD.map(a => a.split(",")).flatMap(x => x)
    // org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[31] at flatMap at <console>:26
    
    

관련 자료

  • 이전 html을 변경하지 않고 CSS 그리드의 1 개 항목을 100 % 확장하십시오
  • 다음 shell - 공백없이 쉼표로 구분 된 하위 문자열 루프