无法使用 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
有什么想法我在这里做错了吗?
【问题讨论】:
愚蠢的问题...<hdfs_server>
实际上不在您的代码中,对吗? 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 中写入数据帧