hive Pyspark:在SQL中可以看到 parquet 表吗?

u3r8eeie  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(163)

我对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阅读时可能会很特殊,但我的第一个脚本做得很好,表在任何地方都是可见的。

z9smfwbn

z9smfwbn1#

您只需要使用saveAsTable函数来实现这个(doc)。默认情况下,它将数据存储在默认位置,但是您可以使用path选项来重新定义它,并使表成为“非托管”表(更多详细信息请参阅此文档)。只需使用以下代码:

df.write.mode('overwrite').partitionBy('DATA_DATE_PART') \
  .format("parquet") \
  .option("path", "/path/file") \
  .saveAsTable("database.df")

相关问题