2017-07-06 55 views
2
response = "mi_or_chd_5" 

outcome = sqlc.sql("""select eid,{response} as response 
from outcomes 
where {response} IS NOT NULL""".format(response=response)) 
outcome.write.parquet(response, mode="overwrite") # Success 
print outcome.schema 
StructType(List(StructField(eid,IntegerType,true),StructField(response,ShortType,true))) 

但是當推斷模式:無法加載平面文件

outcome2 = sqlc.read.parquet(response) # fail 

失敗:

AnalysisException: u'Unable to infer schema for Parquet. It must be specified manually.;' 

/usr/local/lib/python2.7/dist-packages/pyspark-2.1.0+hadoop2.7-py2.7.egg/pyspark/sql/utils.pyc in deco(*a, **kw) 

木地板的文件說,該格式是自我描述,並且完整的模式在t時可用他拼花地板文件被保存了。是什麼賦予了?

使用星火2.1.1。在2.2.0中也失敗了。

發現this bug report,但被固定在 2.0.1,2.1.0。

更新:這項工作時連接master =「本地」,並連接到master =「mysparkcluster」失敗。通常,當您嘗試讀取一個空目錄作爲地板出現

回答

2

此錯誤。 可能您的結果數據幀爲空。

在寫入之前,您可以檢查DataFrame是否爲空,並且使用outcome.rdd.isEmpty()

+0

數據幀不爲空。我相信問題發生是因爲文件名'response'無法寫入羣集。在本地模式下工作正常。 – user48956

+0

然後,也許你可以嘗試更改用戶名。在Pyspark:'os.environ [「HADOOP_USER_NAME」] =「hdfs」'或在Scala'System.setProperty(「HADOOP_USER_NAME」,「hdfs」)' –

+0

我不確定我們是否使用hadoop。是否需要Spark,並且在安裝Spark集羣時需要使用用戶配置文件進行配置? (我們所有的數據都來自關係數據庫,並根據需要加載到Spark中)。 在任何情況下我都不需要在「hdfs://」前加上文件名。 如果使用一個文件名,如節能工程「/我的/ NFS/network_directory /文件名」。這也使我認爲路徑是指工人本地文件系統。 (對不起 - 火花的n00b) – user48956

0

這種情況,當你嘗試讀取一個空表中出現。如果表格已正確插入數據,則應該沒有問題。

除此之外與實木複合地板,同樣的事情發生與ORC。