【发布时间】:2018-11-30 10:44:07
【问题描述】:
我正在尝试使用 Databricks 的 spark-csv_2.10 依赖项将数据帧写入 *.csv 文件到 HDFS。该依赖项似乎工作正常,因为我能够将 .csv 文件读取到 DataFrame 中。但是当我执行写入时,出现以下错误。将标头写入文件后出现异常。
18/06/21 21:41:58 WARN hdfs.DFSClient: Caught exception
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1281)
at java.lang.Thread.join(Thread.java:1355)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:967)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:705)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:894)
这是我使用的代码的简化版本
DataFrame df = sqlContext.read().format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.option("delimiter", "|")
.load("/user/abc/data.csv");
df.registerTempTable("empTable");
DataFrame result = sqlContext.sql("SELECT department, avg(salary) as avgSalary FROM empTable GROUP BY department").cache();
result.write()
.format("com.databricks.spark.csv")
.option("header", "true")
.save("/user/abc/csv/"); //InterruptedException comes here
//The directory "/user/abc/csv/" gets created and it even has temp files.
当我将查询更改为 SELECT department, salary FROM empTable 时,写入工作正常。
谁能帮我解决这个问题?
编辑:按照 Chandan 的要求,这里是result.show();的结果
+----------+---------+
|department|avgSalary|
+----------+---------+
| Finance| 5000.0|
| Travel| 5000.0|
+----------+---------+
我使用 Spark 1.6.0 和 spark-csv_2.10:1.5.0
【问题讨论】:
-
您使用的是哪个版本的 Spark?
-
你有权限写入代码中使用的HDFS目录吗?
-
你可以使用 save("/user/abc/csv/test");而不是 save("/user/abc/csv/");
-
@PhaniKumarYadavilli 这会有什么不同吗?因为 /csv 和 /test 都是目录。另外,当我更改
SQLContext.sql()运行的查询时,相同的路径也可以正常工作 -
通常,代码应该可以工作。因为当我在本地尝试时,您的代码运行良好。要么您有权限问题,要么它可能被视为一些格式错误的 URI。
标签: java apache-spark apache-spark-sql hdfs spark-csv