2016-04-27 102 views
0

使用:spark 1.5.2,配置单元1.2 我有镶木地板格式的外部配置单元表。我创建了一个.py脚本,用于从my_table中选择一个数据框,执行一些转换,然后尝试写回原始表。无法覆盖pyspark中的镶木地板配置单元表

我尝试以下方法:

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

这引发以下错误:

pyspark.sql.utils.AnalysisException: Cannot insert overwrite into table that is also being read from.

  • df.write.mode('overwrite').parquet('my_path')
  • df.write.parquet('my_path', mode='overwrite')
  • df.write.save('my_path', format='parquet', mode = 'overwrite')
  • 这些似乎都引发此错误:

    ERROR Client fs/client/fileclient/cc/client.cc:1802 Thread: 620 Open failed for file /my_path/part-r-00084-9, LookupFid error No such file or directory(2) 2016-04-26 16:47:17,0942 ERROR JniCommon fs/client/fileclient/cc/jni_MapRClient.cc:2488 Thread: 620 getBlockInfo failed, Could not open file /my_path/part-r-00084-9 16/04/26 16:47:17 WARN DAGScheduler: Creating new stage failed due to exception - job: 16

    **请注意,如果文件格式为orc,但上述方法1正常工作,但会为拼花地板引发该错误。

    任何建议将不胜感激!

    回答

    0

    从迄今为止发现的所有内容来看,用于读写parquet格式文件的解决方案似乎是写入临时/暂存目录,删除原始目录,然后将临时目录重命名为您的原版的。 要做到这一点在pyspark你将需要以下命令:

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