2016-10-30 3 views
1

나는 다음을 수행하여 RDD[(String, (String, String, Map[String, Int]))]로 변환 dataFrame = [CUSTOMER_ID ,itemType, eventTimeStamp, valueType]이 : 내 입력이 거대한 내 이후Scala/SPARK에서 Dataframe을 RDD로 변환하는 효율적인 방법은 무엇입니까?

val tempFile = result.map({ 
    r => { 
     val customerId = r.getAs[String]("CUSTOMER_ID") 
     val itemType = r.getAs[String]("itemType") 
     val eventTimeStamp = r.getAs[String]("eventTimeStamp") 
     val valueType = r.getAs[Map[String, Int]]("valueType") 
     (customerId, (itemType, eventTimeStamp, valueType)) 
      } 
      }) 

이 많은 시간이 걸립니다. dfRDD[(String, (String, String, Map[String, Int]))]으로 변환하는 효율적인 방법이 있습니까?

+0

입력 한도는 얼마나됩니까? –

+0

DataFrame을 RDD로 변환하는 데 얼마나 걸리나요? –

+0

DataFrame에서 다른 수의 파티션을 설정하려고 시도 했습니까? 어떤 차이가 있습니까? –

답변

1

당신이 설명한 작업은 얻을 수있는만큼 저렴합니다. 약간의 getAs을 수행하고 몇 개의 튜플을 할당하는 것은 거의 무료입니다. 속도가 느린 경우 큰 데이터 크기 (7T)로 인해 불가피합니다. 또한 Catalyst 최적화를 RDD에서 수행 할 수 없으므로 DataFrame 작업의 이러한 종류의 .map을 포함하면 다른 스파크 바로 가기를 방지 할 수 있습니다.

관련 문제