【问题标题】:java.lang.RuntimeException: scala.collection.convert.Wrappers$JListWrapper is not a valid external type for schema of stringjava.lang.RuntimeException:scala.collection.convert.Wrappers$JListWrapper 不是字符串模式的有效外部类型
【发布时间】:2022-08-16 14:39:40
【问题描述】:

我正在尝试使用 Scala spark 从弹性读取数据,但它会抛出错误消息,例如 java.lang.RuntimeException:scala.collection.convert.Wrappers$JListWrapper 不是字符串模式的有效外部类型。 我们有没有其他方法可以通过使用 scala spark 和弹性搜索来进行操作。

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\")
  • 提供 databricks 运行时版本、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\") 。选项(\"es.field.read.empty.as.null\", \"no\")
  • Elasticsearch 连接器的版本是什么?
  • 我不确定,我如何检查连接器版本,你能帮我吗?
  • 检查集群/作业 ui

标签: scala apache-spark elasticsearch pyspark databricks


【解决方案1】:

看起来您使用的 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 库附加到集群 - 在这种情况下,集群管理器将获取所有必要的依赖项。

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 2021-07-23
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多