intelliJ: работает искра: невозможно определить ожидаемый символ и идентификатор, но найден строковый литерал & ';' ожидается, но ')' найдено - PullRequest
0 голосов
/ 03 марта 2020

каждый, у меня есть вопросы по поводу запуска spark через intelliJ IDEA . Если кто-то может предложить мне помощь, я буду очень признателен. Огромное спасибо. Я гуглил их, пытался, но ничего не менял и даже не ухудшал результат, поэтому я просто держу его в оригинале.

Я набрал какой-то простой scala код для проверки spark , работающий через intelliJ IDEA , но появились некоторые ошибки. Мои вопросы здесь:

1. Пожалуйста, посмотрите на пи c 1 & 2. Есть 2 ошибки "не удается разрешить символ ===", а "значение '$' не является членом StringConext", а подробности в пи c 3.

2. Если я закомментирую неправильные строки кода с помощью «//», то код может быть запущен, можно прочитать и показать df, но строка кода для вычисления среднего значения не работает. Ошибки отображаются в пи c 4 и 5.

Может кто-нибудь, пожалуйста, помогите мне решить эти 2 проблемы. Огромное спасибо !!!

демо

пом. xml

error1

error2

окончательный результат

Вот мой код 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))
  }
}

1 Ответ

0 голосов
/ 04 марта 2020

Итак, первая причина ошибки в функции соединения - неправильные аргументы. В вашей первой функции соединения 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. Лучше делать это в системе, а не программно.

...