繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM