在Scala / SPARK中将Dataframe转换为RDD的有效方法?

时间:2016-10-30 20:16:14

标签: scala apache-spark dataframe rdd

我有dataFrame = [CUSTOMER_ID ,itemType, eventTimeStamp, valueType]我通过执行以下操作转换为RDD[(String, (String, String, Map[String, Int]))]

 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))
          }
          } )

由于我的输入很大,这需要很长时间。有没有有效的方法将df转换为RDD[(String, (String, String, Map[String, Int]))]

1 个答案:

答案 0 :(得分:1)

你所描述的操作就像它将要获得的那样便宜。做一些getAs并分配几个元组几乎是免费的。如果它变慢,由于您的数据量很大(7T),这可能是不可避免的。另请注意,无法在RDD上执行Catalyst优化,因此在DataFrame操作中包含此类.map下游通常会阻止其他Spark快捷方式。