2017-04-05 17 views
3

次のコードは、App特性を拡張してIdeaのrunコマンドを使用して実行するオブジェクトの内部に置くと問題なく実行されます。私はワークシートからそれを実行してみたときにIntellij Ideaのスカラワークシート内でSparkを実行できない

はしかし、私はこれらのシナリオのいずれかが発生します。最初の行が存在する場合

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)) 

プロジェクトは、アイデアの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" 
     ) 

私はthis答えで解決策を試してみました。しかし、私が使用しているIdea Ultimate 2017.1ではうまくいきませんし、ワークシートを使用している場合は、できるだけ余分なオブジェクトをワークシートに追加したくありません。

データセットオブジェクトでcollect()メソッドを使用し、 "Aclass"インスタンスの配列を取得すると、エラーはなくなります。エラーの原因となったDSを直接操作しようとしています。

答えて

1

使用日食互換モード(オープンPreferences->型スカラ - 言語&フレームワークでは>、スカラを選択 - > [ワークシートを選択してください - >のみ日食互換モードを選択する)私はSparkSessionオブジェクトを使用することができるようにしたいhttps://gist.github.com/RAbraham/585939e5390d46a7d6f8

+0

見ます。 Eclipse互換モードをチェックしても問題は解決されませんでした。 – jrook

関連する問題