[英]Efficient way to convert Dataframe to RDD in Scala/SPARK?
我有一个dataFrame = [CUSTOMER_ID ,itemType, eventTimeStamp, valueType]
RDD[(String, (String, String, Map[String, Int]))]
通过执行以下操作将其转换为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]))]
吗?
您描述的操作将变得便宜。 进行一些getAs
和分配一些元组几乎是免费的。 如果运行缓慢,则可能由于数据量大(7T)而不可避免。 还要注意,不能在RDD上执行Catalyst优化,因此在DataFrame操作的下游包括这种.map
通常会阻止其他Spark快捷方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.