【问题标题】:Spark saveAsTextFile to Azure Blob creates a blob instead of a text fileSpark saveAsTextFile to Azure Blob 创建一个 blob 而不是文本文件
【发布时间】:2016-07-10 02:20:35
【问题描述】:

我正在尝试将 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 的文件夹中的一系列应用程序/八位字节流文件。

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

【问题讨论】:

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


    【解决方案1】:

    好吧,我不确定您是否可以只获得一个没有目录的文件。如果你这样做了

    rdd1 .coalesce(1).saveAsTextFile("wasb:///HVACOut")
    

    您将在名为“HVACOut”的目录中获得一个文件,该文件应类似于 part-00001。这是因为您的 rdd 在集群中受到他们所谓的分区的干扰。当您调用保存(所有保存功能)时,它将为每个分区创建一个文件。所以通过调用 coalesce(1) 你告诉你想要 1 个分区。

    希望这会有所帮助。

    【讨论】:

    • 我试过了,它会创建一个文件,但它不是文本文件。它仍然只是一个名为 HVACOut 的文件夹中的应用程序/八位字节流文件。另外,它创建了一个 0 字节的 HVACOut.txt 文件
    【解决方案2】:

    在 Azure HDInsight 上完成预配 Apache Spark 群集后,您可以转到群集的内置 Jupyter 笔记本https://YOURCLUSTERNAME.azurehdinsight.net/jupyter

    您会在此处找到示例笔记本,其中包含有关如何执行此操作的示例。

    具体来说,对于 scala,您可以转到名为“02 - 从 Azure 存储 Blob (WASB) (Scala) 读取和写入数据”的笔记本。

    这里复制一些代码和cmets:

    注意:

    因为 Spark 本身不支持 CSV,所以没有内置的方法可以将 RDD 写入 CSV 文件。但是,如果要将数据保存为 CSV,则可以解决此问题。 代码:

    csvFile.map((line) => line.mkString(",")).saveAsTextFile("wasb:///example/data/HVAC2sc.csv")
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-05
      • 2021-11-29
      • 2015-01-29
      • 2021-05-29
      • 2019-11-12
      • 2020-10-14
      • 1970-01-01
      • 2012-02-04
      相关资源
      最近更新 更多