我使用数据库。我正在尝试创建一个表格,如下所示
` 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 /
答案 0 :(得分:1)
Spark使用Hive Metastore来创建这些永久表。这些表基本上是Hive中的外部表。
一般来说,您尝试的是不可能的,因为Hive外部表位置在创建时需要是唯一的。
但是,如果在hive Metastore中加入分区策略,仍然可以获得具有不同位置的hive表。
在hive Metastore中,您可以拥有指向不同位置的分区。
然而,没有现成的方法来实现这一目标。首先,您需要为数据集指定分区键,并从第一个位置创建一个表,其中整个数据属于一个分区。然后改变表以添加新分区。
样品:
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
答案 1 :(得分:-1)
您可以为两个或多个镶木地板文件单独创建数据框,然后将它们合并(假设它们具有相同的模式)
df1.union(df2)