pyspark java.lang.RuntimeException:scala.collection.convert.Wrappers$JListWrapper不是字符串架构的有效外部类型

7gyucuyw  于 2023-04-19  发布在  Spark
关注(0)|答案(1)|浏览(245)

我尝试使用Scala spark从elastic读取数据,但它会抛出类似java.lang.RuntimeException的错误消息:scala.collection.convert.Wrappers$JListWrapper对于string的schema不是有效的外部类型。我们是否有其他方法来使用scala spark和ElasticSearch来完成操作。

Databricks- 9.1 LTS spark-3.1.2,Scala 2.12
验证码:

spark.sql("set spark.sql.legacy.timeParserPolicy=LEGACY") 

val reader = sqlContext.read.format("org.elasticsearch.spark.sql")
  .option("es.nodes","..*.*")
  .option("es.net.http.auth.user", elasticUsername)
  .option("es.net.http.auth.pass", elasticPassword) 
  .option("es.nodes.wan.only", "true")
  .option("es.resource", indexName)
  .option("es.read.field.exclude", excludeFields)
  .option("es.read.field.as.array.include", arrayFields)
  .option("es.query", elasticQueryString)
  .option("es.scroll.size","10000")
  .option("es.field.read.empty.as.null", "no")
7hiiyaii

7hiiyaii1#

看起来你使用的Elasticsearch库版本不正确。如果你使用elasticsearch_spark_20_2_12_7_12_0,那么它是为Spark 2.4编译的版本(你可以检查Maven Central)。
相反,你需要一个version compiled against Spark 3.x,名称以elasticsearch_spark_30开头-不确定推荐哪个版本,因为7.x是针对Spark 3.0编译的,8.1+是针对- 3.2.x编译的
我还建议使用Maven坐标,而不是将jar库附加到集群--在这种情况下,集群管理器将获取所有必要的依赖项。

相关问题