取消
顯示的結果
而不是尋找
你的意思是:

訪問結構體元素dataframe裏麵?

schnee1
新的貢獻者三世

我有JSON數據集包含一個價格在一個字符串“5.00美元”。我想將數字部分轉換成雙使用在一個MLLIB LabeledPoint,並設法把價格字符串分割成一個字符串數組。下麵創建一個數據集與正確的結構:

- - - - - - - - - - - - - - -

進口org.apache.spark.mllib.linalg。{向量,向量}

進口org.apache.spark.mllib.regression.LabeledPoint

case類突發交換(f1:雙,f2:雙,價格:數組(String))

val obs1 = newObs(1、2、數組(“美元”,“5.00”)

val obs2 = newObs(2, 1,數組(“美元”,“3.00”)

val df = sc.parallelize (Seq (obs1 obs2)) .toDF ()

df。printSchema df.show ()

val = df的標簽。地圖(行= > LabeledPoint (row.get (2) .asInstanceOf [Array [String]]蘋果(1).toDouble, Vectors.dense (row.getDouble (0) row.getDouble (1))))

labeled.take (2) .foreach println ()

- - - - - - - - - - - - - - - - - - - - -

當我運行這個的時候,我得到這個(以及更多):

df: org.apache.spark.sql。DataFrame = [f1:雙,f2:雙,價格:數組<字符串>)

“價格”是一個字符串數組。

我也得到一個類轉換異常

. lang。scala.collection.mutable ClassCastException。WrappedArray ofRef美元不能投[Ljava.lang.String;

這可能是對“println”,但也可能意味著我沒有得到‘價格’的第二元素結構。

幫助嗎?

7回複7

User16826991422
貢獻者

嗨Schnee -

在這種情況下我會使用Dataframes爆炸符。

爆炸你可以把數組和數組中的所有元素上的操作應用。

cfregly
貢獻者

schnee1
新的貢獻者三世

謝謝@cfregly。我想我必須需要更多的補救學習Scala。

參考你提供的工作非常出色,但當我試著把它翻譯成我的問題通過:

val dfExploded = df.explode (df(“價格”)){病例行(公關:數組(行))= > pr.map (pr = >價格(pr (0)。asInstanceOf(字符串),公關(1).asInstanceOf [String]))}

dfExploded.show ()

我風異常。

cfregly
貢獻者

@schnee

哈!不,這是一個不必要的繁瑣和複雜的一個相當常見的轉換。

這將是很高興有一個df.explodeArray()方法。

總之,你看到什麼類型的異常?

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map