我使用以下命令将带有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条答案
按热度按时间bvjxkvbb1#
这是spark的预期行为:
df...etc.parquet("")
将数据写入hdfs位置,并且不会在配置单元中创建任何表。但是
df..saveAsTable("")
在配置单元中创建表并向其中写入数据。如果表已经存在,则此函数的行为取决于mode函数指定的保存模式(默认为引发异常)。当mode为overwrite时,dataframe的架构不需要与现有表的架构相同。
这就是你的原因
not able to find table in hive
演出后df...parquet("")