当前位置: 首页 > 知识库问答 >
问题:

Spark从Blob读取文本文件

司马羽
2023-03-14

编写了通过Spark读取文本文件的代码...在Local中运行良好...但在HDInsight中运行时产生错误->从Blob读取文本文件

org.apache.spark.sparkException:作业由于阶段失败而中止:阶段0.0中的任务0失败了4次,最近的失败:阶段0.0中丢失的任务0.3(TID 5,wn1-hchdin.bpqkkmavxs0ehkfnaruw4ed03d.dx.internal.cloudapp.net,executor 2):java.lang.AbstractMethoderRror:com.journaldev.sparkdemo.WordCounter$$lambda$17/790636414.call(ljava/lang/object;)ljava/util/iterator;在org.apache.spark.api.java.javarddlike$$anonfun$fn$1$1.apply(javarddlike$anonfun$fn$1$1.apply(javarddlike.spark.api.java.javarddlike$$anonfun$fn$125)在org.apache.spark.api.java.javarddlike$$anonfun$fn$1$1.apply(javarddlike.fn$125)在scala.collection.iterator$$anon$12.nextcur(iterator.scala:434)lexecutor.runworker(ThreadPoolExecutor.java:1149)位于java.util.concurrent.ThreadPoolExecutor$worker.run(ThreadPoolExecutor.java:624)位于java.lang.Thread.run(Thread.java:748)

这是我的代码

    JavaSparkContext ct = new JavaSparkContext();
        Configuration config = ct.hadoopConfiguration();
        config.set("fs.azure", "org.apache.hadoop.fs.azure.NativeAzureFileSystem");
        config.set("org.apache.hadoop.fs.azure.SimpleKeyProvider", "<<key>>");

        JavaRDD<String> inputFile = ct.textFile("wasb://<<container-nam>>@<<account>>.blob.core.windows.net/directory/file.txt");

        JavaRDD<String> wordsFromFile = inputFile.flatMap(content -> Arrays.asList(content.split(" ")));

        wordsFromFile.html" target="_blank">foreach(cc ->{System.out.println("p :"+cc.toString());});

共有1个答案

连厉刚
2023-03-14

对于运行在local上的Spark,有一个官方博客介绍了如何从Spark访问Azure Blob存储。关键是您需要将Azure Storage account配置为core-site.xml文件中的HDFS兼容存储,并将两个jar hadoop-azure和azure-storage添加到您的类路径中,以便通过协议wasb[s]访问HDFS。您可以参考官方教程来了解与wasb兼容HDFS的存储,以及关于HDInsight配置的博客来了解更多细节。

对于在Azure上运行的Spark,区别只是使用wasb访问HDFS,其他准备工作由Azure在使用Spark创建HDInsight集群时完成。列出文件的方法是sparkcontext的listFiles或wholeTextFiles。

希望有帮助。

 类似资料:
  • 问题内容: 我在通过火花流从天蓝色斑点读取数据时遇到问题 上面的代码适用于HDFS,但无法从Azure blob读取文件 上面是在azure UI中显示的路径,但是这行不通,我是否丢失了某些内容,以及如何访问它。 我知道Eventhub是流数据的理想选择,但是我目前的情况要求使用存储而不是队列 问题答案: 为了从Blob存储中读取数据,需要完成两件事。首先,您需要告诉Spark在基础Hadoop配

  • 我正在编写一个程序,读取文本文件,并显示第一个学生的姓名、年级和全班平均成绩。对于上面给出的文件,结果如下:类中的第一个是Ahmad Hamwi has 16.00,类的平均值是12.25这是我试图读取的W文本文件 这就是我一直犯的错误 我已经试了几个小时了。我知道错误在第37行。这可能与类型有关。我尝试了int和浮动,但一样。

  • 我有一个大的(>500M行)CSV文件。这个CSV文件中的每一行都包含一个位于HDFS上的二进制文件的路径。我想使用Spark读取这些文件中的每一个,处理它们,并将结果写到另一个CSV文件或表中。 在驱动程序中执行此操作非常简单,下面的代码完成了这项工作 但是失败 是否可以让执行者直接访问HDFS文件或HDFS文件系统?或者,是否有一种有效的方法来读取HDFS/S3上数百万个二进制文件并用Spar

  • 问题很简单:您有一个本地spark实例(或者是集群,或者只是在本地模式下运行它),您希望从gs://读取

  • 问题内容: 我正在尝试在Android Studio的res \ raw文件中保留一个.txt文件,并读取/解析该文件。我在“ res”目录(未创建)中创建的名为“ raw”的文件夹中有一个文件“ my_file.txt”。 我认为我的主要问题是:创建File对象(与Scanner对象一起使用)时,应该为文本文件传递什么路径? 这是我的代码: 问题答案: 认为您正在寻找符合以下条件的东西 其中ct