2016-09-20 38 views
0

我試圖將文件從S3保存到hdfs,按年,月和日分區。 我有S3中的文件路徑以及RDD中的日期信息。TypeError:'JavaPackage'對象在使用rdd.foreach()時不可調用

def saveFile(filePath): 
    df = sqlContext.read.format("com.databricks.spark.csv") 
     .options(delimiter='|',header=True) 
     .load(filePath[0],schema=schema) 
    df.write.mode("overwrite") 
     .save(targetDir+"/year="+filePath[1]+"/month="+filePath[2]+"/day="+filePath[3]) 

filePathsRDD.foreach(saveFile) 

RDD.foreach功能失敗,出現錯誤:

TypeError: 'JavaPackage' object is not callable

+0

嗨,你有沒有試過通配符? http://stackoverflow.com/questions/37639956/how-to-import-multiple-csv-files-in-a-single-load – GwydionFR

+0

我想將每天的文件保存在一個單獨的文件夾中,這就是爲什麼我正在閱讀他們的一天。我也可以通過在數據框中讀取所有數據(使用通配符)並將其保存爲木地板(按日期分區)來完成此操作。但是,此操作在驅動程序中需要較高的resultSize,這是未來擴展時的一個問題。 –

回答

0

這是不可能的。先收集:

>>> for path in filePathsRDD.collect(): 
...  saveFile(path) 
+0

我知道我可以做到這一點。我試圖分發它,因爲我有一個每一天和多年數據的路徑。 –

+0

你不能,對不起。 – 2016-09-21 16:20:27