DataFrame.write.parquet-HIVE或Impala无法读取Parquet文件

时间:2019-06-13 13:00:12

标签: python apache-spark hive pyspark parquet

我使用以下命令将带有pySpark的DataFrame写入HDFS:

df.repartition(col("year"))\
.write.option("maxRecordsPerFile", 1000000)\
.parquet('/path/tablename', mode='overwrite', partitionBy=["year"], compression='snappy')

查看HDFS时,我可以看到文件正确放置在此处。无论如何,当我尝试使用HIVE或Impala读取表格时,找不到该表格。

这是怎么回事,我错过了什么吗?

有趣的是,df.write.format('parquet').saveAsTable("tablename")正常工作。

1 个答案:

答案 0 :(得分:1)

这是Spark的预期行为,

  • df...etc.parquet("") 将数据写入HDFS位置,并且不会在Hive中创建任何表。

  • df..saveAsTable("") 在配置单元中创建table并将数据写入其中。

  

在表已经存在的情况下,此函数的行为   取决于由模式功能指定的保存模式(默认为   引发异常)。当mode为Overwrite时,   DataFrame不必与现有表相同。

这就是为什么您在执行 not able to find table in hive

后成为 df...parquet("") 的原因