我有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”,但也可能意味著我沒有得到‘價格’的第二元素結構。
幫助嗎?
謝謝@cfregly。我想我必須需要更多的補救學習Scala。
參考你提供的工作非常出色,但當我試著把它翻譯成我的問題通過:
val dfExploded = df.explode (df(“價格”)){病例行(公關:數組(行))= > pr.map (pr = >價格(pr (0)。asInstanceOf(字符串),公關(1).asInstanceOf [String]))}
dfExploded.show ()
我風異常。