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")