【问题标题】:Error regarding creating a jar file for spark scala为 spark scala 创建 jar 文件时出错
【发布时间】:2020-07-22 10:38:57
【问题描述】:

我将使用 IntelliJ IDEA 创建我的第一个 spark scala jar 文件。

我刚刚尝试导入一个 csv 文件,但它不起作用。这是我的代码:

import org.apache.spark.{SparkConf, SparkContext}

    object jar1 {
      def main(args: Array[String]): Unit = {


        val sc = new SparkContext(new SparkConf().setAppName("ex1"))

        val data = sc.read.option("header","true").option("inferSchema","true").csv(args(0))



        data.saveAsTextFile(args(1))
      }

    }

当我尝试使用 IntelliJ IDEA 打包此代码以创建 jar 文件时,出现以下错误:

[info] Compiling 1 Scala source to C:\Users\Downloads\Count\target\scala-2.11\classes ...
[error] C:\Users\Downloads\Count\src\main\scala\jar1.scala:14:24: value read is not a member of org.apache.spark.SparkContext
[error]     val data = sc.read.option("header","true").option("inferSchema","true").csv(args(0))
[error]                        ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed

这可能是什么原因?

谢谢

【问题讨论】:

    标签: scala apache-spark intellij-idea jar


    【解决方案1】:

    嗯,错误信息实际上告诉你原因:

    SparkContext 类中没有 read 方法。

    如果您检查所有 API SparkContext 必须提供 (https://spark.apache.org/docs/2.3.1/api/scala/index.html#org.apache.spark.SparkContext),

    在里面找不到read 方法...

    【讨论】:

      【解决方案2】:

      如果你使用SparkContext,你可能需要使用textFile方法,

      val data = sc.textFile(args(0))
      

      但这对我来说似乎有点奇怪,您似乎使用SparkSession 语法,我宁愿SparkSession

      import org.apache.spark.sql.SparkSession
      
       val spark = SparkSession
            .builder()
            .appName("ex1")
            .getOrCreate()
      

      以及如何阅读 csv 文件

      val data = spark.read.format("csv")
                           .option("header","true")
                           .option("inferSchema","true")
                           .load(args(0))
      

      您可以查看此 here 以及如何读取 csv here

      编辑

      保存结果:

      data.write.format("text").save(args(1))
      

      【讨论】:

      • 感谢您的回答。您是否也可以在此 asnwer 中包含如何将最终答案保存到文本文件 (data.saveAsTextFile(args(1))) 的可能替代方法?
      • 完成,希望它有效。如果是这样,请接受问题,以便其他有相同答案的人可以快速找到解决方案
      • 我当然会。感谢您的解决方案。虽然我在导入文件时出错,但这不是我的主要目的。我可能需要做一些操作,比如根据导入的数据拟合模型。例如,我尝试使用此附加代码来计算汇总统计数据并将其保存到文本文件中。 : val df3 = df2.summary().show() df3.write.format("text").save(args(1)) 。现在看来这行不通。你能帮忙吗?
      • 去掉第一行的show(),show()方法打印出什么都不返回的数据帧(Unit),所以后来,当你尝试在df3上运行write时,它不是DF而是一个 Unit 对象,所以没有 write 方法。您需要阅读一些关于 spark 的信息才能正确使用它,我的答案中有一些链接可能会有所帮助
      • 嘿,我还有最后一个问题。如果我在 EMR (AWS) 上运行这个 jar,那么我应该包含任何其他参数吗? .谢谢
      猜你喜欢
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2019-08-07
      • 2020-07-23
      • 1970-01-01
      • 2017-08-22
      • 2014-11-20
      • 2011-09-19
      相关资源
      最近更新 更多