我正在尝试使用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
答案 0 :(得分:0)
是要写入的UNIX文件系统还是HDFS。我可以执行以上代码。您是否可以看到结果DataFrame。尝试result.show并在此处发布结果。将检查是什么问题。如果可能的话,请发布完整的日志
尝试将其保存在镶木地板中,然后查看其是否有效。如果它可以正常工作,那么csv必须存在一些问题,我们可以检查一下。它为我工作。在spark 2.2和1.6.3中尝试查询的问题没有问题。尝试在本地UNIX文件系统中写入。我认为这可能与HDFS有关。您的代码似乎正确
答案 1 :(得分:0)
您可以忽略此警告。这是Hadoop中的错误。