Apache spark 如何将小拼花锉刀与Spark组合?

Apache spark 如何将小拼花锉刀与Spark组合?,apache-spark,parquet,Apache Spark,Parquet,我有一个配置单元表,其中有很多小拼花文件,我正在用它创建一个Spark数据帧,以便使用SparkSQL进行一些处理。由于我有大量的分割/文件,我的Spark工作创建了很多我不想要的任务。基本上,我想要的是与Hive提供的功能相同的功能,即通过指定最大拆分大小设置,将这些小的输入拆分组合成更大的拆分。如何使用Spark实现这一点?我尝试使用coalesce函数,但我只能用它指定分区的数量(我只能用它控制输出文件的数量)。相反,我真的希望对任务处理的(组合)输入拆分大小进行一些控制 编辑:我使用的是

我有一个配置单元表,其中有很多小拼花文件,我正在用它创建一个Spark数据帧,以便使用SparkSQL进行一些处理。由于我有大量的分割/文件,我的Spark工作创建了很多我不想要的任务。基本上,我想要的是与Hive提供的功能相同的功能,即通过指定最大拆分大小设置,将这些小的输入拆分组合成更大的拆分。如何使用Spark实现这一点?我尝试使用coalesce函数,但我只能用它指定分区的数量(我只能用它控制输出文件的数量)。相反,我真的希望对任务处理的(组合)输入拆分大小进行一些控制


编辑:我使用的是Spark本身,而不是Spark上的蜂巢

编辑2:以下是我的当前代码:

//create a data frame from a test table
val df = sqlContext.table("schema.test_table").filter($"my_partition_column" === "12345")

//coalesce it to a fixed number of partitions. But as I said in my question 
//with coalesce I cannot control the file sizes, I can only specify 
//the number of partitions
df.coalesce(8).write.mode(org.apache.spark.sql.SaveMode.Overwrite)
.insertInto("schema.test_table")

我并没有尝试过,但在《入门指南》中读到,设置此属性应该有效“hive.merge.sparkfiles=true”

在Hive上使用Spark的情况下,Spark的抽象并没有提供显式的数据分割。然而,我们可以通过几种方式控制并行性

  • 您可以利用DataFrame.repartition(numPartitions:Int)显式控制分区的数量
  • 如果您使用的是配置单元上下文,请确保Hive-site.xml包含CombinedInputFormat。这可能会有帮助

  • 有关更多信息,请查看以下有关Spark数据并行性的文档-。

    我使用的是Spark本身,而不是Spark上的Hive。嗨-是否可以提供更多详细信息-代码、Spark配置(从默认设置修改的任何内容)、数字文件、大小、块大小等。我使用当前的代码编辑了我的问题。我目前正在测试大约100个文件,其中每个文件都是~10MB和HDFS块大小,拼花地板行组大小是128MB。