我对PySpark/Hive还很陌生,我有一个问题:
我有一个 Dataframe ,想把它作为分区表写入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))
但是,对于不断增长的 Dataframe ,我认为有一个更好的解决方案,而不是必须定义所有列:
df.write.mode('overwrite').partitionBy('DATA_DATE_PART').parquet("/path/file")
但是,我无法通过spark.sql访问这样的表,也无法在我的HUE浏览器中看到它。但我可以通过PySpark shell看到它:hdfs dfs -ls /path/
我的问题是,为什么会这样呢?我读到过parquet文件在用SQL阅读时可能会很特殊,但我的第一个脚本做得很好,表在任何地方都是可见的。
1条答案
按热度按时间z9smfwbn1#
您只需要使用
saveAsTable
函数来实现这个(doc)。默认情况下,它将数据存储在默认位置,但是您可以使用path
选项来重新定义它,并使表成为“非托管”表(更多详细信息请参阅此文档)。只需使用以下代码: