【问题标题】:How to save a spark dataframe to csv on HDFS?如何将火花数据帧保存到 HDFS 上的 csv?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果hdfs://yourpath/ 不起作用

    试试这个,在我的情况下它有效:
    df.coalesce(1).write.format('com.databricks.spark.csv').options(header='true').save("/user/user_name/file_name")

    所以从技术上讲,如果此数据帧默认有多个分区,我们将使用单个 reducer。您将在您的 hdfs 位置获得一份 CSV。

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      相关资源
      最近更新 更多