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