apache-spark - 从多个 parquet 路径创建 Spark SQL 表
问题描述
我使用数据块。我正在尝试创建如下表
` target_table_name = 'test_table_1'
spark.sql("""
drop table if exists %s
""" % target_table_name)
spark.sql("""
create table if not exists {0}
USING org.apache.spark.sql.parquet
OPTIONS (
path ("/mnt/sparktables/ds=*/name=xyz/")
)
""".format(target_table_name))
尽管使用“*”让我可以灵活地加载不同的文件(模式匹配)并最终创建一个表,但我希望基于两个完全不同的路径创建一个表(没有模式匹配)。
path1 = /mnt/sparktables/ds=*/name=xyz/ path2 = /mnt/sparktables/new_path/name=123fo/
解决方案
Spark 使用 Hive 元存储来创建这些永久表。这些表本质上是 Hive 中的外部表。
通常,您尝试的操作是不可能的,因为 Hive 外部表位置在创建时需要是唯一的。
但是,如果您在 hive 元存储上合并分区策略,您仍然可以实现具有不同位置的 hive 表。
在 hive 元存储中,您可以拥有指向不同位置的分区。
然而,没有现成的方法来实现这一点。首先,您需要为数据集指定一个分区键,并从整个数据属于一个分区的第一个位置创建一个表。然后alter table 添加一个新分区。
样本:
create external table tableName(<schema>) partitioned by ('name') location '/mnt/sparktables/ds=*/name=xyz/'
然后你可以添加分区
alter table tableName add partition(name='123fo') location '/mnt/sparktables/new_path/name=123fo/'
此过程的替代方法是从 2 个位置创建 2 个数据框,然后将它们组合起来saveAsaTable
推荐阅读
- reactjs - MERN 404 发布请求失败
- javascript - 在 React 中加载页面时未显示 H1 标记值
- matlab - 使用周期性图像创建 3D RVE(立方体矩阵、球体粒子)
- .net - 如何以管理员身份从 Worker Service 执行控制台应用程序?
- android - google play 控制台应用程序状态草稿为什么?
- react-native - TypeError: dispatch(...).then 不是函数
- python - 使用 astropy.coordinates.match_to_catalog_sky 进行目录匹配
- django - 在 django admin 中显示未选择的多对多字段的值
- jmeter - 为 jmeter 创建一个自定义后端侦听器,用于将测试变量和其他数据发送到 Influxdb
- sharepoint - sharepoint 设置以提供同步子文件夹而不是扩展文件夹名称