【发布时间】:2017-03-09 03:42:48
【问题描述】:
我正在使用 spark 2.0,我想知道,是否可以列出特定 hive 表的所有文件?如果是这样,我可以使用 spark sc.textFile("file.orc")
直接增量更新这些文件。
如何向 hive 表添加新分区?我可以从 spark 使用 hive 元存储上的任何 api 吗?
有什么方法可以获取映射数据框row => partition_path的内部配置单元函数
我的主要理由是对表进行增量更新。现在我想出的唯一方法是FULL OUTER JOIN SQL +SaveMode.Overwrite,效率不高,因为他会覆盖所有表,而我的主要兴趣是针对某些特定分区的增量更新/添加新分区
编辑
从我在 HDFS 上看到的情况来看,当 SaveMode.Overwrite spark 将发出表定义时,即CREATE TABLE my_table .... PARTITION BY (month,..)。 spark将所有文件放在$HIVE/my_table下而不是$HIVE/my_table/month/...下,这意味着他没有对数据进行分区。当我写 df.write.partitionBy(...).mode(Overwrite).saveAsTable("my_table") 时,我在 hdfs 上看到它是正确的。
我使用了SaveMode.Overwrite,因为我正在更新记录而不是附加数据。
我使用 spark.table("my_table") 加载数据,这意味着 spark 延迟加载表,这是一个问题,因为我不想加载所有表只是 if 的一部分。
问题:
1.spark是否会打乱数据,因为我使用了partitionBy(),或者他比较当前分区,如果相同,他不会打乱数据。
2.spark 是否足够聪明,可以在从数据中更改部分数据(即仅针对特定月份/年份)时使用分区修剪,并应用该更改而不是加载所有数据? (FULL OUTER JOIN 基本上是扫描所有表的操作)
【问题讨论】:
标签: apache-spark hive