Spark saveAsTextFile到Azure Blob会创建一个blob而不是文本文件

时间:2016-03-22 23:37:40

标签: scala azure apache-spark azure-storage-blobs hdinsight

我正在尝试将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文件。

如何将其作为单个文本文件输出?

2 个答案:

答案 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")

希望这有帮助!