spark读取elasticsearch中数组类型的字段

在使用SparkSQL从Elasticsearch读取包含数组字段的数据时,出现ClassCastException。错误源于Elasticsearch的mapping不记录字段是否为数组,导致Spark尝试将数组类型转换为非数组类型。解决方法是在读取配置中加入`es.read.field.as.array.include`选项,指定数组字段名,以避免类型不匹配的错误。
摘要由CSDN通过智能技术生成

 

之前做的一个项目需要用sparksql读取elasticsearch的数据,当读取的类型中包含数组时报错.

读取方式大概是

val options = Map("pushdown" -> "true",
  "strict" -> "false",
  "es.nodes" -> "127.0.0.1",
  "es.port" -> "9200")
val df = spark.read.format("es").options(options).load("spark/scorearray")

报错信息如下:

WARN ScalaRowValueReader: Field 'array' is backed by an array but the associated Spark Schema does not reflect this;
              (use es.read.field.as.array.include/exclude) 
ERROR Executor: Exception in task 2.0 in stage 1.0 (TID 3)
java.lang.ClassCastException: scala.collection.convert.Wrappers$JListWrapper cannot be cast to java.lang.Long
    at scala.runtime.BoxesRunTime.unboxToLong(BoxesRunTime.java:105)
    at org.apache.spark.sql.catalyst.expressions.BaseGener

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值