2017-01-11 14 views
1

私はDATAFRAME array<string>などの取引があります。スパーク:RDDにdatarframeアレイ[文字列]を変更する方法[アレイ[文字列]]

transactions: org.apache.spark.sql.DataFrame = [collect_set(b): array<string>] 

私はRDD[Array[string]]にそれを変更したいが、私はそれを変更していたときにRDDに、それがorg.apache.spark.rdd.RDD[org.apache.spark.sql.Row]に変更ばかりだ:それはメッセージであるよう

val sam: RDD[Array[String]] = transactions.rdd 
<console>:42: error: type mismatch; 
found : org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] 
required: org.apache.spark.rdd.RDD[Array[String]] 
     val sam: RDD[Array[String]] = transactions.rdd 

答えて

2

transactions.rddは、RDD[Row]戻ります。

手動で配列に行を変換することができます:それは次のようになり

val sam = transactions.rdd.map(x => x.getList(0).toArray.map(_.toString)) 

もっとスパーク2.0スタイル:

val sam = transactions.select("columnName").as[Array[String]].rdd 

DATAFRAMEから適切な列名でCOLUMNNAMEを交換してください - おそらくあなたはそれ以上にcollect_set(b)の名前を変更する必要がありますユーザーフレンドリーな名前

1

Dataframeは実際には配列[Row]なので、データフレームでcollectを実行すると配列[Row]が作成され、yそれをRDDに変換すると、RDD [行]になります。

あなたはRDDをしたいのであれば[アレイは、[文字列]]あなたはそれをこのように行うことができます:文字列を解析なぜあなたは純粋なオブジェクト・コードを持つことができる場合

val sam = transactions.rdd.map(x => x.toString().stripPrefix("[").stripSuffix("]").split(fieldSeperator)) 
+0

を?そして、 'Dataframeは実際には配列[行]'は偽です、DataFrameは単なる配列以上のものです –

+0

はいデータフレームはそれ以上ですが、データフレームの基本単位は行です。 –

+0

まだ、文字列の解析は間違っています。文字列の1つに "、"を付けるとどうなりますか?あなたのコード –

関連する問題