2016-08-16 158 views
4

我正在使用Spark 2.0 Scala。我可以使用toDF()方法將RDD轉換爲DataFrame。Spark 2.0 Scala - RDD.toDF()

val rdd = sc.textFile("/pathtologfile/logfile.txt") 
val df = rdd.toDF() 

但是對於我的生活,我無法找到API文檔中的位置。它不在RDD下。但它在DataSet下(link 1)。不過,我有一個RDD不是數據集。 (link 2)。

所以請幫我理解爲什麼toDF()可以爲我的RDD調用。這種方法從哪裏繼承?

+0

你從哪兒打電話呢?火花的殼呢? –

+0

是的。只需使用本地Spark設置並運行我的scala腳本,即可使用 - ./bin/spark-shell --master local [2] -i /pathtomyscale/myfile.scala – Carl

回答

5

它是從這裏來的:

Spark 2 API

說明:如果導入sqlContext.implicits._,你要轉換的隱式方法RDDDataSetHolderrddToDataSetHolder),然後調用toDFDataSetHolder

+0

太棒了!現在這個方法來自哪裏是有道理的。 – Carl

1

是的,你應該導入sqlContext implicits這樣的:

val sqlContext = //create sqlContext 

import sqlContext.implicits._ 

val df = RDD.toDF() 

之前你打電話 「toDF」 在您的RDDS

問候。

+0

我不必導入它。我的代碼按原樣工作。也許它是自動導入的?但是我沒有得到的是爲什麼我沒有在API文檔中看到toDF()作爲implicits的一個方法?它來自哪裏? – Carl

+0

毫米..好吧,對不起,我明白你的問題。我找到了哪裏,是在Dataset.scala,但我不知道如何導入:S https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org /apache/spark/sql/Dataset.scala – DanielVL

2

是的,我終於找到了這個問題。這讓我非常困擾,這篇文章是一種拯救生命的方式。我試圖將日誌文件中的數據一般地加載到一個案例類對象,使其變爲可變列表,這個想法是最終將列表轉換爲DF。然而,由於它是可變的,Spark 2.1.1已經改變了toDF的實現,所以爲什麼列表不想被轉換。我終於想到甚至覆蓋保存數據到文件並使用.read讀取它。但是5分鐘後這個帖子挽救了我的一天。

我做了與描述完全相同的方式。

將數據裝載到可變列表後,我立即使用

import spark.sqlContext.implicits._ 
val df = <mutable list object>.toDF 
df.show()