首页 文章

未能在pyspark中覆盖镶木地板蜂巢表

提问于
浏览
0

使用:spark 1.5.2,hive 1.2我有一个镶木地板的外部蜂巢桌 . 我创建了一个.py脚本,从my_table中选择一个数据帧,进行一些转换,然后尝试写回原始表 .

我尝试了以下方法:

  • df.write.insertInto('table_name', overwrite='true') .

这会引发以下错误:

pyspark.sql.utils.AnalysisException:无法将覆盖插入到也从中读取的表中 .

  • df.write.mode('overwrite').parquet('my_path')

  • df.write.parquet('my_path', mode='overwrite')

  • df.write.save('my_path', format='parquet', mode = 'overwrite')

这些似乎都抛出了这个错误:

ERROR客户端fs / client / fileclient / cc / client.cc:1802线程:620文件/ my_path / part-r-00084-9打开失败,LookupFid错误没有这样的文件或目录(2)2016-04-26 16 :47:17,0942错误JniCommon fs / client / fileclient / cc / jni_MapRClient.cc:2488线程:620 getBlockInfo失败,无法打开文件/ my_path / part-r-00084-9 16/04/26 16:47: 17 WARN DAGScheduler:由于异常而创建新阶段失败 - 作业:16

**请注意,如果文件格式为orc,则上述方法1可以正常工作,但会抛出拼接错误 .

任何建议将不胜感激!

1 回答

  • 0

    从我迄今为止发现的所有内容来看,读取和写回镶木地板文件的解决方案似乎是写入临时/暂存目录,删除原始目录,然后将临时目录重命名为原始目录 . 要在pyspark中执行此操作,您将需要以下命令:

    import os
    import shutil
    shutil.rmtree('my_tmp_path')
    os.rename('my_tmp_path', 'my_path)
    

相关问题