解决Spark 读取 Elasticsearch的array类型报错的问题

在我们读取Elasticsearch存储的半结构化的数据是,会遇到需要获取array类型的数据。然而会报错,错误截图如下:

解决Spark 读取 Elasticsearch的array类型报错的问题

  • es.read.field.as.array.include

通过es.read.field.as.array.include指定array类型,防止报错。代码如下:

from pyspark.sql import SparkSession

if __name__ == '__main__':
    spark = SparkSession.builder \
        .appName("SparkOnEs") \
        .master("local") \
        .config('spark.jars.packages', 'org.elasticsearch:elasticsearch-spark-20_2.11:6.5.2') \
        .getOrCreate()

    df = spark.read.format("org.elasticsearch.spark.sql") \
        .option("es.nodes", "localhost") \
        .option("es.port", "9200") \
        .option("es.read.field.as.array.include", "sons") \
        .load("test/info")

    df.printSchema()
    df.registerTempTable("tmp")

    df2 = spark.sql("select * from tmp")
    df2.show()

    spark.stop()

结果如图:

解决Spark 读取 Elasticsearch的array类型报错的问题

es参数参考:

ES Configuration


除此之外,如果在es插入数据时,如果存在字段有空对象{}或空集合[]的时,需要注意,可能会导致报错。

相关文章:

  • 2022-12-23
  • 2022-01-04
  • 2022-12-23
  • 2022-12-23
  • 2021-08-25
  • 2021-04-28
  • 1970-01-01
  • 2022-12-23
猜你喜欢
  • 2021-07-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-01
相关资源
相似解决方案