2017-07-06 57 views
3

當我嘗試使用elasticsearch-spark中的esRDD("index")函數從elasticsearch中讀取數據時,我得到的結果類型爲org.apache.spark.rdd.RDD[(String, scala.collection.Map[String,AnyRef])]。當我檢查這些值時,它們都是AnyRef。但是,我看到在ES site,它說:如何在使用Elasticsearch中的elasticsearch-spark從Elasticsearch讀取數據時的類型轉換

elasticsearch-Hadoop的自動轉換內置類型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

如果您在es 5.4中使用spark 2,您爲什麼要閱讀RDD? – eliasah

+0

@eliasah因爲在官方文檔中,它使用rdd .... nvm,我現在知道該怎麼做。 Thx – PC9527

+0

如果您找到了解決方案,請與他人分享解決方案並接受它:) – eliasah

回答

1

好的,我找到了解決方案。 如果使用esRDD,則所有類型的信息都將丟失。
這是更好,如果我們使用:

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

您可以配置ES在option,如果你已經做到了,option可以忽略不計。

數據returend在DataFrame中,只要轉換得到elasticsearch-spark的支持,數據類型將保留(在模式中轉換爲sql.DataTypes)。

現在你可以做任何你想做的事情。

相關問題