簡體   English   中英

無法在Intellij Idea中的Scala工作表中運行Spark

[英]Cannot make Spark run inside a scala worksheet in Intellij Idea

如果將以下代碼放入擴展了應用程序特征的對象中,並使用Idea的run命令運行該代碼,則該代碼將run

但是,當我嘗試從工作表運行它時,遇到以下情況之一:

1-如果第一行存在,我得到:

任務無法序列化:java.io.NotSerializableException:A $ A34 $ A $ A34

2-如果第一行被注釋掉,我得到:

無法訪問內部類A $ A35 $ A $ A35 $ A12的編碼器,而無法訪問定義該類的范圍。

//First line!
org.apache.spark.sql.catalyst.encoders.OuterScopes.addOuterScope(this)

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types.{IntegerType, StructField, StructType}

case class AClass(id: Int, f1: Int, f2: Int)
val spark = SparkSession.builder()
  .master("local[*]")
  .appName("Test App")
  .getOrCreate()
import spark.implicits._

val schema = StructType(Array(
  StructField("id", IntegerType),
  StructField("f1", IntegerType),
  StructField("f2", IntegerType)))

val df = spark.read.schema(schema)
  .option("header", "true")
  .csv("dataset.csv")

// Displays the content of the DataFrame to stdout
df.show()
val ads = df.as[AClass]

//This is the line that causes serialization error
ads.foreach(x => println(x))

該項目已使用Idea的Scala插件創建,這是我的build.sbt:

   ...
   scalaVersion := "2.10.6"
   scalacOptions += "-unchecked"
   libraryDependencies ++= Seq(
       "org.apache.spark" % "spark-core_2.10" % "2.1.0",
       "org.apache.spark" % "spark-sql_2.10" % "2.1.0",
       "org.apache.spark" % "spark-mllib_2.10" % "2.1.0"
       )

我嘗試了答案中的解決方案。 但是它不適用於我正在使用的Idea Ultimate 2017.1,而且,當我使用工作表時,我盡可能不要在工作表中添加額外的對象。

如果我在數據集對象上使用collect()方法並獲取“ Aclass”實例的數組,則也不會再有錯誤。 它正在嘗試直接與導致錯誤的DS一起使用。

使用Eclipse兼容模式(在Languages&Frameworks中打開Preferences-> type scala->,選擇Scala-> Choose Worksheet->僅選擇Eclipse兼容模式)請參閱https://gist.github.com/RAbraham/585939e5390d46a7d6f8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM