解决Spark 读取 Elasticsearch的array类型报错的问题
在我们读取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()
结果如图:
es参数参考:
除此之外,如果在es插入数据时,如果存在字段有空对象{}或空集合[]的时,需要注意,可能会导致报错。