我尝试使用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")
1条答案
按热度按时间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库附加到集群--在这种情况下,集群管理器将获取所有必要的依赖项。