首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从多个拼图路径创建Spark SQL表

从多个拼图路径创建Spark SQL表
EN

Stack Overflow用户
提问于 2018-05-31 07:52:34
回答 2查看 2.5K关注 0票数 1

我使用databricks。我正在尝试创建一个表,如下所示

代码语言:javascript
复制
`       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/

EN

回答 2

Stack Overflow用户

发布于 2018-05-31 12:48:09

Spark使用Hive metastore创建这些永久表。这些表本质上是配置单元中的外部表。

通常情况下,您尝试的是不可能的,因为在创建时,配置单元外部表位置需要是唯一的。

但是,如果您将分区策略合并到您的hive metastore上,您仍然可以实现具有不同位置的hive表。

在hive metastore中,您可以拥有指向不同位置的分区。

然而,没有现成的方法来实现这一点。首先,您需要为数据集指定一个分区键,并从第一个位置创建一个表,其中整个数据属于一个分区。然后alter table添加一个新分区。

示例:

代码语言:javascript
复制
create external table tableName(<schema>) partitioned by ('name') location '/mnt/sparktables/ds=*/name=xyz/'

然后,您可以添加分区

代码语言:javascript
复制
alter table tableName add partition(name='123fo') location '/mnt/sparktables/new_path/name=123fo/'

此过程的替代方法是从2个位置创建2个数据帧,将它们合并,然后执行saveAsaTable

票数 1
EN

Stack Overflow用户

发布于 2018-05-31 07:59:21

可以分别为两个或多个地块文件创建数据框,然后合并它们(假设它们具有相同的模式)

代码语言:javascript
复制
df1.union(df2)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50614813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档