我正在尝试将RDD保存到文本文件中。我的Spark实例在Linux上运行并连接到Azure Blob
val rdd = sc.textFile("wasb:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
//find the rows which have only one digit in the 7th column in the CSV
val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1)
rdd1.saveAsTextFile("wasb:///HVACOut")
当我查看输出时,它不是一个单独的文本文件,而是一个名为HVACOut的文件夹中的一系列application / octet-stream文件。
如何将其作为单个文本文件输出?
答案 0 :(得分:1)
嗯,我不确定你是否只能获得一个没有目录的文件。如果你这样做
rdd1 .coalesce(1).saveAsTextFile("wasb:///HVACOut")
您将在名为“HVACOut”的目录中获得一个文件,该文件应该像part-00001。这是因为您的rdd在您的群集中受到干扰,他们称之为分区。当你进行保存调用(所有保存功能)时,它将为每个分区创建一个文件。所以通过调用coalesce(1)你告诉你想要1个分区。
希望这有帮助。
答案 1 :(得分:0)
在Azure HDInsight上完成配置Apache Spark群集后,您可以在https://YOURCLUSTERNAME.azurehdinsight.net/jupyter转到群集的内置 Jupyter笔记本。
在那里,您将找到示例笔记本,其中包含如何执行此操作的示例。
具体来说,对于scala,您可以转到名为" 02的笔记本 - 从Azure存储Blob(WASB)(Scala)读取和写入数据"。
在此复制一些代码和评论:
注意:强>
由于Spark本身不支持CSV,因此没有内置方法将RDD写入CSV文件。但是,如果要将数据保存为CSV,则可以解决此问题。 代码:
csvFile.map((line) => line.mkString(",")).saveAsTextFile("wasb:///example/data/HVAC2sc.csv")
希望这有帮助!