Pyspark:Parquet 表在 SQL 中可见吗?
Pyspark: Parquet tables visible in SQL?
我是 PySpark/Hive 的新手,我遇到了一个问题:
我有一个数据帧,想将其作为分区 table 写入 HDFS。到目前为止,我已经通过:
df = spark.sql('''
CREATE EXTERNAL TABLE database.df(
ID STRING
)
PARTITIONED BY (
DATA_DATE_PART STRING
)
STORED AS PARQUET
LOCATION 'hdfs://path/file'
''')
df.createOrReplaceTempView("df")
df = spark.sql('''
INSERT INTO database.df PARTITION(DATA_DATE_PART = '{}')
SELECT ID
FROM df
'''.format(date))
但是随着数据帧的增长,我认为不必定义所有列,我认为有更好的解决方案:
df.write.mode('overwrite').partitionBy('DATA_DATE_PART').parquet("/path/file")
但是,像这样的 table 我无法通过 spark.sql 访问,也无法在我的 HUE 浏览器中看到它。我可以通过 PySpark shell 看到它:hdfs dfs -ls /path/
所以我的问题是,这是为什么?我读过,使用 SQL 阅读时镶木地板文件可能很特别,但我的第一个脚本运行良好,table 随处可见。
你只需要为此使用 saveAsTable
函数 (doc). By default it stores data in the default location, but you can use the path
option to redefine it & make a table "unmanaged" (see this doc for more details)。只需使用以下代码:
df.write.mode('overwrite').partitionBy('DATA_DATE_PART') \
.format("parquet") \
.option("path", "/path/file") \
.saveAsTable("database.df")
我是 PySpark/Hive 的新手,我遇到了一个问题:
我有一个数据帧,想将其作为分区 table 写入 HDFS。到目前为止,我已经通过:
df = spark.sql('''
CREATE EXTERNAL TABLE database.df(
ID STRING
)
PARTITIONED BY (
DATA_DATE_PART STRING
)
STORED AS PARQUET
LOCATION 'hdfs://path/file'
''')
df.createOrReplaceTempView("df")
df = spark.sql('''
INSERT INTO database.df PARTITION(DATA_DATE_PART = '{}')
SELECT ID
FROM df
'''.format(date))
但是随着数据帧的增长,我认为不必定义所有列,我认为有更好的解决方案:
df.write.mode('overwrite').partitionBy('DATA_DATE_PART').parquet("/path/file")
但是,像这样的 table 我无法通过 spark.sql 访问,也无法在我的 HUE 浏览器中看到它。我可以通过 PySpark shell 看到它:hdfs dfs -ls /path/
所以我的问题是,这是为什么?我读过,使用 SQL 阅读时镶木地板文件可能很特别,但我的第一个脚本运行良好,table 随处可见。
你只需要为此使用 saveAsTable
函数 (doc). By default it stores data in the default location, but you can use the path
option to redefine it & make a table "unmanaged" (see this doc for more details)。只需使用以下代码:
df.write.mode('overwrite').partitionBy('DATA_DATE_PART') \
.format("parquet") \
.option("path", "/path/file") \
.saveAsTable("database.df")