当我尝试使用elasticsearch-spark中的esRDD("index")
函数从elasticsearch读取数据时,我得到类型为org.apache.spark.rdd.RDD[(String, scala.collection.Map[String,AnyRef])]
的结果。当我检查值时,它们都是AnyRef
类型。但是,我在ES site看到了,它说:
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"
我错过了什么吗?我怎样才能以方便的方式转换类型?
答案 0 :(得分:1)
好的,我找到了解决方案。
如果您使用esRDD
,则所有类型信息都会丢失
如果我们使用它会更好:
val df = sparkSession.read.format("org.elasticsearch.spark.sql").option("es.read.field.as.array.include", "").load("index")
您可以在option
中配置,如果您之前已经完成,option
可以忽略。
数据returend位于DataFrame
,只要sql.DataTypes
支持转换,数据类型就会在架构中保留(转换为elasticsearch-spark
)。
现在你可以做任何你想做的事。