2016-04-11 11 views
1

スパークの開始方法flatmapまたはexplodeのデータフレームの作成方法をご希望ですか?スパークデータフレームのフラット化

それはdf.groupBy("columName").countを使用して作成され、私はそれを収集する場合は、以下の構造を有した:

[[Key1, count], [Key2, count2]] 

しかし、私はむしろ何かを達成するための適切なツールである何

Map(bar -> 1, foo -> 1, awesome -> 1) 

のようなものを持っていると思いますこのような?フラットマップ、爆発など何か?

コンテキスト:spark-jobserverを使用します。後者の形式でデータを提供する場合に意味のある結果(例:json serializationなど)があるようです

答えて

2

DataFrameでcollectまたはcollectAsListと呼んでいるとしますか?それはArray[Row]/List[Row]を返します。

def counted = df.groupBy("columName").count() 
// obviously, replace "keyColumn" and "valueColumn" with your actual column names 
def result = counted.rdd.map(r => (r.getAs[String]("keyColumn"), r.getAs[Long]("valueColumn"))).collectAsMap() 

resultが期待通りにMap[String, Long]を入力しています - もしそうなら

マップにこれらを変換する最も簡単な方法は、根本的なRDDを使用して、キーと値のタプルにそのrecrodsをマッピングし、collectAsMapを使用することです。

+0

ありがとうございました。それはまさに私が望むものです。 –

+0

残念ながら(現在のフォーマットはhttps://github.com/spark-jobserver/spark-jobserver/blob/master/job-server-tests/src/spark.jobserver/WordCountExample.scalaと同じですが、WordCountの例 –

+0

「まだJSONではなく、私のマップを受け取っています」とはどういう意味ですか?どこですか?サーバーのREST APIを使用してジョブを実行していますか(たとえば、 'curl'を使用していますか? )、それともあなた自身がメインジョブを実行していますか?それが後者の場合はもちろん、JSONではなくマップを取得します。メソッドを呼び出して 'Map'を返すと' Map'を返します。マジックはありません。REST APIを介して –

関連する問題