scala - sparkSession.sparkContext对于本地Spark集群为null

标签 scala apache-spark elasticsearch rdd

我创建了一个本地Spark集群和一个Spark session ,如下所示

val sparkConf = new SparkConf(true).setAppName("test").setMaster("local[8]")

val sparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

使用它,我还成功创建了Dummy数据帧以在我的测试Scala App中使用
val dummy: DataFrame = sparkSession.createDataFrame(Seq(
  ("BABY", "videos", "0.5"),
  ("APPLIANCES AND STORAGE", "audios", "0.6")
).toDF("dept", "type", "weight")

后来我创建了一个对象Item,然后尝试将其写入Elastic Search,如下所示
val elasticItemRDD = sparkSession.sparkContext.makeRDD(Seq(Item))
    EsSpark.saveToEs(elasticItemRDD, esIndexNType, Map("es.mapping.id" -> "itemid"))

从我的sparkSession访问sparkContext时,这给了我一个空指针异常。我努力了
sparkSession.createDataset(Seq(Item)).rdd 

这不会给我这个空指针错误,而是其他一些MatchError。我喜欢使我的sparkContext.makeRDD起作用,以便可以写到ElasticSearch。此NullPointerException可能是什么原因?我想念什么吗?
scalaVersion := "2.11.8"
val sparkVersion = "2.2.0"
libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion % "provided",
  "org.apache.spark" %% "spark-sql" % sparkVersion % "provided",
  "org.apache.spark" % "spark-hive_2.11" % sparkVersion,
  "org.elasticsearch" % "elasticsearch-spark-20_2.11" % "5.5.1"
)

最佳答案

问题是SparkContext在我的 map 函数关闭中不可用。它仅适用于驱动程序功能,不适用于 worker 任务。

Spark job is failed due to java.io.NotSerializableException: org.apache.spark.SparkContext

关于scala - sparkSession.sparkContext对于本地Spark集群为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46066044/

相关文章:

scala - 类型和泛型 : difference between `[X <: Int]` and `{type X <: Int }`

scala - Scala 中 NonFatal 和 Exception 的区别

apache-spark - 如何在 PySpark 中用 NULL 替换字符串值?

spring-boot - AbstractElasticsearchRepository:无法加载elasticsearch节点:MapperParsingException:找不到字段的分析器[autocomplete_index]

elasticsearch - Elasticsearch Nest 2.x索引嵌套对象

java - 使用Java URI验证案例类中的url

scala - spark中的RDD是什么

scala - 如何在 spark Dataframe 中进行汇总时保持值的顺序

apache-spark - Spark Dataframe groupBy 并将结果排序到列表中

elasticsearch - 是否可以在 logstash scripted_upsert 期间访问事件字段?