在 SPARK 中使用 elasticsearch-spark 从 Elasticsearch 读取数据时如何转换类型

How to convert types when reading data from Elasticsearch using elasticsearch-spark in SPARK

当我尝试使用 elasticsearch-spark 中的 esRDD("index") 函数从 elasticsearch 读取数据时,我得到的结果类型为 org.apache.spark.rdd.RDD[(String, scala.collection.Map[String,AnyRef])]。当我检查这些值时,它们都是 AnyRef 类型。但是,我在 ES site 上看到,它说:

elasticsearch-hadoop automatically converts Spark built-in types to Elasticsearch types (and back)

我的依赖项是:

scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"  
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.1.0"  
libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.1.0"  
libraryDependencies += "org.elasticsearch" % "elasticsearch-spark-20_2.11" % "5.4.0"

我错过了什么吗?我怎样才能方便地转换类型?

好的,我找到了解决办法。 如果您使用 esRDD,所有类型信息都会丢失。
如果我们使用:

会更好
val df = sparkSession.read.format("org.elasticsearch.spark.sql").option("es.read.field.as.array.include", "").load("index")

可以在option中配置es,如果之前配置过,option可以忽略

返回的数据在DataFrame中,只要elasticsearch-spark支持转换,数据类型在schema中保留(转换为sql.DataTypes)。[=17] =]

现在你可以随心所欲了。