【发布时间】:2016-03-21 14:43:53
【问题描述】:
Hive 表是使用 4 个分区创建的。
CREATE TABLE IF NOT EXISTS hourlysuspect ( cells int, sms_in int) partitioned by (traffic_date_hour string) stored as ORC into 4 buckets
spark 代码中的以下几行将数据插入到此表中
hourlies.write.partitionBy("traffic_date_hour").insertInto("hourly_suspect")
在 spark-defaults.conf 中,并行进程数为 128
spark.default.parallelism=128
问题是当插入发生在 hive 表中时,它有 128 个分区而不是 4 个桶。 defaultParallelism 不能减少到 4,因为这会导致系统非常缓慢。另外,我尝试过 DataFrame.coalesce 方法,但这会使插入速度太慢。
有没有其他方法可以在数据插入表时强制bucket个数为4?
【问题讨论】:
-
需要更多洞察力,特别是 hourlies.write 的代码。但如果我不得不猜测,您正在尝试在不使用收集或获取的情况下保存数据。因此,每个执行程序都试图将数据保存到 hdfs,使其达到 128(这是您的并行度)。
-
没错,执行程序正在使用默认并行度写入 hdfs。 hourlies 是一个 DataFrame,write 是一个为 DataFrame 定义的函数
标签: apache-spark hive