[英]How to convert types when reading data from Elasticsearch using elasticsearch-spark in SPARK
当我尝试使用esRDD("index")
-spark中的esRDD("index")
函数从esRDD("index")
读取数据时,我得到org.apache.spark.rdd.RDD[(String, scala.collection.Map[String,AnyRef])]
类型的结果org.apache.spark.rdd.RDD[(String, scala.collection.Map[String,AnyRef])]
。 当我检查值时,它们都是AnyRef
类型。 但是,我在ES网站上看到,它说:
elasticsearch-hadoop自动将Spark内置类型转换为Elasticsearch类型(并返回)
我的依赖是:
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
。
数据returend位于DataFrame
,只要sql.DataTypes
elasticsearch-spark
支持转换,数据类型sql.DataTypes
在架构中保留(转换为sql.DataTypes
)。
现在你可以做任何你想做的事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.