我感到困惑的是,为什么在将得到的rdd.mapPartitions转换为DataFrame时,Spark似乎使用了1任务。),将非SQL函数应用于数据块(mapPartitions on RDD),然后转换回DataFrame,以便我可以使用DataFrame.write进程。我可以从DataFrame -> mapPartitions开始,然后使用像saveAsTextFile这样的RDD编写器,但这并不理想,因为DataFrame.write进程可以用Orc格
(SparkContext.scala:1435) at org.apache.spark.api.java.JavaRDDLike$class.mapPartitions(JavaRDDLike.scala:141)
at org.apache.spark.api.java.JavaRDD.mapPartitions(JavaRDD.scala<em
我使用Spark将一个非常大的TSV文件转换成两组键值对,然后加载到分布式密钥值存储中。我不使用DataFrames,因为TSV不遵循定义得很好的模式,而稀疏矩阵则是更好的模型。我的伪码大概是,val entityAttrPairs = orig.mapPartitions(convertLinesToKVPairs)
v
我在一个库中使用DataFrame mapPartitions,它是的松散实现。输出DataFrame有一些新的(大)列,输入DataFrame在执行mapPartitions之前进行了分区和内部排序。大多数用户会在其他列上进行投影,然后在已分区的列上聚合。由于mapPartitions使用planWithBarrier,这会导致昂贵的冗余混洗。我想知道在catalyst api中是否有一个不太复杂的解决方案?//key1->key2 many to one
.repar