我使用databricks。我正在尝试创建一个表,如下所示
` 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/新路径/name=123fo/
发布于 2018-05-31 12:48:09
Spark使用Hive metastore创建这些永久表。这些表本质上是配置单元中的外部表。
通常情况下,您尝试的是不可能的,因为在创建时,配置单元外部表位置需要是唯一的。
但是,如果您将分区策略合并到您的hive metastore上,您仍然可以实现具有不同位置的hive表。
在hive metastore中,您可以拥有指向不同位置的分区。
然而,没有现成的方法来实现这一点。首先,您需要为数据集指定一个分区键,并从第一个位置创建一个表,其中整个数据属于一个分区。然后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
发布于 2018-05-31 07:59:21
可以分别为两个或多个地块文件创建数据框,然后合并它们(假设它们具有相同的模式)
df1.union(df2)
https://stackoverflow.com/questions/50614813
复制相似问题