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

时间:2017-07-06 07:56:15

标签: scala apache-spark elasticsearch elasticsearch-spark

当我尝试使用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"

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

1 个答案:

答案 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)。

现在你可以做任何你想做的事。