【发布时间】:2018-01-19 10:59:48
【问题描述】:
Spark 版本:1.6.1,我使用 pyspark API。
DataFrame: df,有两个列。
我试过了:
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”,如果我把dataframe转成rdd,如何将rdd写入hdfs上的csv?
非常感谢!
【问题讨论】:
-
您正在运行哪个版本的数据块:-
-packages com.databricks...? -
如果您可以在同一台服务器上使用
hadoop执行此操作,则似乎是用户权限问题,hadoop chown user:user /path其中 user 是您运行 spark 代码的用户。 -
1.尝试没有“hdfs:/”的路径 2.lines.repartition(1).saveAsTextFile('/pyth/df.csv') 还要检查你是否对 hdfs 有 r/w 权限
-
我解决了这个问题。 1、获得访问权。 2、将rdd的每一行转成字符串,用
saveAsTextFile()将结果保存到part-***中。或者,3,如果我使用save(),我应该像spark-submit --packages com.databricks:spark-csv_2.10:1.5.0 /path一样提交申请,这样我就可以保存了!谢谢大家! -
而不是 'hdfs://path/df.csv' 尝试 'file:///path/df.csv'
标签: python csv apache-spark pyspark hdfs