Spark Scala: «не удается разрешить символ saveAsTextFile (reduByKey)» - IntelliJ Idea - PullRequest
0 голосов
/ 26 июня 2019

Полагаю, некоторые зависимости не определены в файле build.sbt.

Я добавил библиотечные зависимости в файл build.sbt, но все же я получаю эту ошибку, упомянутую в заголовке этого вопроса. Попробуйте найти решение в Google, но не можете найти его

Исходный код My spark Scala (filterEventId100.scala):

package com.projects.setTopBoxDataAnalysis

import java.lang.System._
import java.text.SimpleDateFormat
import java.util.Date
import org.apache.spark.sql.SparkSession

object filterEventId100 extends App {


  if (args.length < 2) {
    println("Usage: JavaWordCount <Input-File> <Output-file>")
    exit(1)
  }

  val spark = SparkSession
    .builder
    .appName("FilterEvent100")
    .getOrCreate()

  val data = spark.read.textFile(args(0)).rdd


  val result = data.flatMap{line: String => line.split("\n")}
      .map{serverData =>
        val serverDataArray = serverData.replace("^", "::")split("::")
        val evenId = serverDataArray(2)
        if (evenId.equals("100")) {
          val serverId = serverDataArray(0)
          val timestempTo = serverDataArray(3)
          val timestempFrom = serverDataArray(6)
          val server = new Servers(serverId, timestempFrom, timestempTo)
          val res = (serverId, server.dateDiff(server.timestampFrom, server.timestampTo))
          res
        }


  }.reduceByKey{
    case(x: Long, y: Long) => if ((x, y) != null) {
         if (x > y) x else y
    }
  }

  result.saveAsTextFile(args(1))

  spark.stop


}

class Servers(val serverId: String, val timestampFrom: String, val timestampTo: String) {

  val DATE_FORMAT = "yyyy-MM-dd hh:mm:ss.SSS"

  private def convertStringToDate(s: String): Date = {
    val dateFormat = new SimpleDateFormat(DATE_FORMAT)
    dateFormat.parse(s)
  }

  private def convertDateStringToLong(dateAsString: String): Long = {
    convertStringToDate(dateAsString).getTime
  }

  def dateDiff(tFrom: String, tTo: String): Long = {
    val dDiff = convertDateStringToLong(tTo) - tFrom.toLong
    dDiff
  }

}

Мой файл build.sbt:

name := "SetTopProject"
version := "0.1"
scalaVersion := "2.12.8"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "2.4.3" exclude ("org.apache.hadoop","hadoop-yarn-server-web-proxy"),
  "org.apache.spark" %% "spark-sql_2.12" % "2.4.3" exclude ("org.apache.hadoop","hadoop-yarn-server-web-proxy"),
  "org.apache.hadoop" %% "hadoop-common" % "3.2.0" exclude ("org.apache.hadoop","hadoop-yarn-server-web-proxy"),
  "org.apache.spark" %% "spark-sql_2.12" % "2.4.3" exclude ("org.apache.hadoop","hadoop-yarn-server-web-proxy"),
  "org.apache.spark" %% "spark-hive_2.12" % "2.4.3" exclude ("org.apache.hadoop","hadoop-yarn-server-web-proxy"),
  "org.apache.spark" %% "spark-yarn_2.12" % "2.4.3" exclude ("org.apache.hadoop","hadoop-yarn-server-web-proxy")
)

Я ожидал, что все будет хорошо, потому что

val spark = SparkSession
.builder
.appName("FilterEvent100")
.getOrCreate()

определен хорошо (без ошибок компилятора), и я использую значение искры для определения значения данных:

val data = spark.read.textFile(args(0)).rdd

, который вызывает функции saveAsTextFile и extendedByKey:

val result = data.flatMap{line: String => line.split("\n")}...
}.reducedByKey {case(x: Long, y: Long) => if ((x, y) != null) {
     if (x > y) x else y
}
result.saveAsTextFile(args(1))

Что нужно сделать, чтобы удалить ошибки компилятора при вызовах функций saveAsTextFile и reduceByKey?

1 Ответ

0 голосов
/ 26 июня 2019

Заменить

 val spark = SparkSession
    .builder
    .appName("FilterEvent100")
    .getOrCreate()

  val data = spark.read.textFile(args(0)).rdd

на

val conf = new SparkConf().setAppName("FilterEvent100")
val sc = new SparkContext(conf)
val spark = SparkSession.builder.config(sc.getConf).getOrCreate()

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