【问题标题】:intelliJ running spark: cannot resolve symbol & identifier expected but string literal found & ';' expected but ')' foundIntelliJ运行火花:无法解析预期的符号和标识符,但找到字符串文字&';'预期但 ')' 找到
【发布时间】:2020-06-16 02:33:27
【问题描述】:

大家, 我对通过 intelliJ IDEA 运行 spark 有疑问。如果有人可以为我提供帮助,我将不胜感激。太感谢了。我用谷歌搜索了它们,我试过了,但没有改变,甚至使结果更糟,所以我只保留它原来的。

我输入了一些简单的 scala 代码来测试通过 intelliJ IDEA 运行的 spark,但出现了一些错误。我的问题在这里:

1.请看图 1 和 2。有 2 个错误“不能 解析符号 ===" 和 "值 '$' 不是 StringConext 的成员", 详情请看图3。

2。如果我用“//”注释了错误的代码行,则代码可以运行,可以读取并显示df,但是用于计算平均值的代码行不起作用。错误如图 4 和 5 所示。

谁能帮我解决这两个问题。非常感谢!!!

demo

pom.xml

error1

error2

final result

这是我的 pom.xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test.demo</groupId>
    <artifactId>DemoProject</artifactId>
    <version>1.0-SNAPSHOT</version>

    <repositories>
        <repository>
            <id>apache</id>
            <url>http://maven.apache.org</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.3</version>
        </dependency>
    </dependencies>

</project>

这是我的 scala 案例对象代码

import org.apache.spark.sql.SparkSession
import java.io.File
import org.apache.spark
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

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

    val spark = SparkSession
      .builder()
      .master("local[*]")
      .appName("Spark SQL basic example")
      .getOrCreate()

    val peopleDFCsv = spark.read.format("csv")
      .option("sep", "\t")
      .option("header", "false")
      .load("C:\\Users\\shell\\OneDrive\\Desktop\\marks.csv")
    peopleDFCsv.printSchema()

    peopleDFCsv.show(15)


    val df = spark.read.option("inferScheme", "true").option("header", "true").csv("C:\\Users\\shell\\OneDrive\\Desktop\\marks.csv")
    df.show()
    df.withColumn("id", monotonically_increasing_id()).show
    df.join(df.groupBy("max(marks)"), $"marks" === $"max(marks)", "leftsemi").show
    df.join(df.filter("subject = maths").groupBy("max(marks)"). $"marks" === $"max(marks)", "leftsemi").show
    df.join(df.filter("subject = maths").select(mean(df("marks")))).show

    //    val a = new File("./data").listFiles()
    //    a.foreach(file => println(file.getPath))
  }
}

【问题讨论】:

  • 谢谢你的提醒,不过我之前试过了,根本不行,问题还是这些,所以在这里问了。
  • @MJfortruth:对于您的错误2:stackoverflow.com/questions/35652665/…
  • 你好,我之前也试过这个,我用的是win10,所以我在“高级系统设置”上设置了路径,我也在intelliJ上导入了hadoop,但还是同样的错误:(“错误 util.Shell: 未能在 hadoop 二进制路径中找到 winutils 二进制文件”
  • 我需要把winutils放到“依赖”中吗?

标签: scala maven apache-spark hadoop intellij-idea


【解决方案1】:

所以,连接函数出错的第一个原因是参数错误。在你的第一个连接函数groupBy 将返回RelationalGroupedDataset 女巫不是Dataframe。你需要在groupBy 函数之后聚合一些东西。看看我的例子。要在列名中使用$,您需要import spark.implicits._。另外,您需要import org.apache.spark.sql.functions._ 才能使用标准的火花列功能,请看:

import spark.implicits._
import org.apache.spark.sql.functions._
import java.io.File
val df = spark.read.option("inferScheme", "true").option("header", "true").csv("C:\\Users\\shell\\OneDrive\\Desktop\\marks.csv")
df.show()
//  df.withColumn("id", monotonically_increasing_id()).show
df.join(df.groupBy("column_for_group").agg(max("marks")), $"marks" === max($"marks"), "leftsemi").show
df.join(df.filter("subject = maths").groupBy("column_for_group").agg(max("marks")), $"marks" === max($"marks"), "leftsemi").show
df.join(df.filter("subject = maths").select(mean(df("marks")))).show

val a = new File("./data").listFiles()
a.foreach(file => println(file.getPath))

winutils 的错误可以通过设置正确的环境变量来解决。你需要用谷歌搜索windows 10 how set environment variable之类的东西。最好在系统中完成,而不是通过编程方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2022-07-24
    相关资源
    最近更新 更多