无法使用 pyspark 写入 hdfs

Posted

技术标签:

【中文标题】无法使用 pyspark 写入 hdfs【英文标题】:unable to write to hdfs using pyspark 【发布时间】:2018-07-26 13:51:52 【问题描述】:

我正在尝试使用 pyspark 将数据写入 hdfs,如下所示:

import pyspark
from pyspark.sql import SparkSession
sparkSession = SparkSession.builder.appName("example-pyspark-read-and-write").getOrCreate()
data = [('First', 1), ('Second', 2), ('Third', 3), ('Fourth', 4), ('Fifth', 5)]
df = sparkSession.createDataFrame(data)

df.write.csv("hdfs://<hdfs_server>:9000/example.csv")

我收到此错误:

Py4JJavaError: An error occurred while calling o445.csv.
: java.net.ConnectException: Call From <hdfs_server> to <hdfs_server>:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

我的 hdfs 在端口 9000 上运行

hdfs getconf -confKey fs.defaultFS
hdfs://localhost:9000

有什么想法我在这里做错了吗?

【问题讨论】:

愚蠢的问题...&lt;hdfs_server&gt; 实际上不在您的代码中,对吗? HDFS 真的在运行吗? 另外,默认情况下,Spark 会读取 HDFS 站点文件,因此您甚至不需要放置 hdfs:// 路径 【参考方案1】:

spark 2.2你可以这样做

data = [('First', 1), ('Second', 2), ('Third', 3), ('Fourth', 4), ('Fifth', 5)]
df = spark.createDataFrame(data)

df.write.csv("example.csv")

您无需专门传递hdfs path。您只需在HDFS 中提供您要存储CSV 的位置。

上面的代码会在HDFS中创建一个example.csv目录,所有的csv文件都在这个目录下。

【讨论】:

感谢您的回答。如您所见,我对此很陌生。一个快速的问题。有一个工具 dynatrace 可以收集每个应用程序、JVM、服务器等的数据点。我正在考虑将这些数据流式传输到 hdfs 以便长期使用,并在每个应用程序的这些数据上运行 spark 作业。有什么想法,我如何在 hdfs app_code_jvm_cpu_date.csv 中组织文件,以便我知道该数据属于哪个应用程序、jvm 和数据框?有什么建议吗? @user1471980 如果您知道数据框是如何创建的,您可以将example.csv 目录下的part-0000 文件重命名为您想要的名称。例如,如果您从 twitter 流式传输数据并从流式传输数据创建数据框,那么您可以将 part-0000 文件重命名为 twitter_stream_abc_def.csv @user1471980 为此你需要`hdfs dfs -mv /path/to/example.csv/part-0000 /path/to/example.csv/twitter_stream_abc_def.csv 我没有听从你的回答。

以上是关于无法使用 pyspark 写入 hdfs的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 pySpark 从 Databricks 在 Cosmos DB/documentDB 中写入数据帧

如何让 PySpark 在内存不足之前将中间结果写入磁盘?

无法从 databricks pyspark 工作人员写入 Azure Sql DataWarehouse

如何访问安装在 hdfs 头节点集群内的 pyspark

无法使用 pyspark 将数据加载到配置单元中

无法读取基于正则表达式的文件 spark