将数据插入配置单

时间:2018-02-16 15:27:48

标签: hive apache-spark-sql spark-dataframe hadoop-partitioning partition-by

我在h3中创建了一个存储在s3位置的表。 它有大约10列,按照相同的顺序在月,年和城市的3列上进行分区。

我正在运行一个创建数据帧(20亿行)的spark作业并写入此表。

val partitions:Seq[Column] = Seq(col("month"),col("year"),col("city"))
df.repartition(partitions: _*).selectExpr(cs.map(_.name): _*).write.mode("overwrite").insertInto(s"$tableName")

selectExpr(cs.map(_。name):_ *)重新排序数据框中的列以与表中的顺序对齐。

当我运行上面的命令插入表格时,我看到每个城市下都有很多登台文件和多个小文件。

s3://s3Root/tableName/month/year/city/file1.csv
                                      file2.csv
                                      ...
                                      file200.csv

我希望每个月每个城市下一个文件。 要合并每个分区。

预期:

s3://s3Root/tableName/month/year/city/file.csv

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

按分区实现一个文件,你应该使用

 {
  "name": "chatastrophe",
  "version": "1.0.0", "main": "index.js", "license": "MIT", 
  "scripts": {
    "build": "node_modules/.bin/webpack" 
  }, 
  "dependencies": {
    "react": "15.6.1",
    "react-dom": "15.6.1", "webpack": "3.5.4", 
   } 
} 

我认为您之前可以避免进行重新分区,如果只执行partitionBy,则每个分区将对文件进行一次分区。