Spark:后续DataFrame中的spark-csv分区和并行性

时间:2016-07-07 19:19:59

标签: scala apache-spark dataframe apache-spark-sql spark-csv

我想知道在使用spark-csv导入源数据时如何在Spark中强制使用后续的,更合适的分区DataFrame。

摘要:

  • spark-csv似乎不像sc.textFile()那样支持导入显式分区。
  • 虽然它为我提供了推断架构"免费"但默认情况下,当我在群集中使用8个执行程序时,我通常只返回2个分区的DataFrames。
  • 即使具有更多分区的后续DataFrame正在通过cache()进行缓存并用于进一步处理(在导入源文件后立即执行),Spark作业历史记录仍显示任务分布中令人难以置信的偏差 - 2执行人将拥有绝大多数任务,而不是我期望的更均匀的分配。

无法发布数据,但代码只是一些简单的加入,通过.withColumn()添加几列,然后通过spark.mlib进行非常基本的线性回归。

以下是Spark History UI的比较图片,显示每个执行程序的任务(最后一行是驱动程序)。

注意:无论是否在repartition()数据框上调用spark-csv,我都会得到相同的偏差任务分布。

Spark Executor Comparison

我如何"强迫" Spark基本上忘记了那些初始DataFrame并从更合适的分区DataFrame开始,或强制spark-csv以某种方式以不同的方式对其DataFrame进行分区(不要求它/修改它的来源)?

我可以使用sc.textFile(file, minPartitions)解决此问题,但我希望我不必诉诸于此问题,因为spark-csv提供的类型很好的架构等。 / p>

0 个答案:

没有答案