如何在HDFS上将火花数据帧保存到csv?

时间:2017-08-11 03:28:14

标签: python csv apache-spark pyspark hdfs

Spark版本:1.6.1,我使用pyspark API。

DataFrame:df,有两个colume。

我试过了:

1: df.write.format('csv').save("hdfs://path/bdt_sum_vol.csv")
2: df.write.save('hdfs://path/bdt_sum_vol.csv', format='csv', mode='append')
3: df.coalesce(1).write.format('com.databricks.spark.csv').options(header='true').save('hdfs://path/')
4: df.write.format('com.databricks.spark.csv').save('hdfs://path/df.csv')

(All above didn't work, Failed to find data source)

或:

def toCSVLine(data):
    return ','.join(str(d) for d in data)

lines = df.rdd.map(toCSVLine)
lines.saveAsTextFile('hdfs://path/df.csv')  

(Permission denied)

问:

1,如何解决“找不到数据源”?

2,我使用sudo在hdfs上创建字典“/ path”,如果我将数据帧转为rdd,如何在hdfs上将rdd写入csv?

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以尝试将“ .save”更改为“ .csv”:

df.coalesce(1).write.mode('overwrite').option(head='true').csv('hdfs://path/df.csv')

答案 1 :(得分:0)

请勿使用hdfs://yourpath/

尝试一下,就我而言,它起作用了:df.coalesce(1).write.format('com.databricks.spark.csv')。options(header ='true')。save(“ / user / user_name / file_name“)

它将在您的file_name位置内形成零件文件,从中可以下载csv文件。 注意:df.coalesce(1)是必需的,否则您的file_name文件夹中会包含很多零件文件。