我正在尝试使用spark2.1.0javaapi将Dataframe(行数据集)持久化为配置单元表。我试着用 saveAsTable
中的方法 DataFrameWriter
班级。
我的代码看起来像: df.write(appendMode).saveAsTable("tablename");
我收到一封信 AnalysisException
声明
org.apache.spark.sql.analysis分析exception:saving data 在我的配置单元中,还不支持serde表。请使用 insertInto()
api作为替代方案
我真的不能用这个吗 saveAsTable
方法?api文档中没有将其标记为已弃用。
1条答案
按热度按时间csga3l581#
异常是因为,您试图在其中附加数据的表“tablename”是用
"Hive serde"
,也就是说,表中的数据tablename
将存储为文本文件。因为,您正在使用
saveAsTable
api,它将数据写入parquet
使用org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
塞德。所以spark api不能用文本附加Parquet数据,这就是为什么会出现异常。解决方法:不要预先创建表,让
saveAsTable
“api使用它第一次需要的Dataframe和属性的架构创建表本身,然后继续在其中添加数据。如果您需要自己创建table,那么您需要确保table存储为Parquet地板,并且具有适当的
TBLPROPERTIES
. e、 g如下: