2017-04-30 7 views
0

私はScala、Spark、MLlibから始めています。 例を実装したいKaggleSparkのクリーニングとデータの準備

データ形式がひどく、データを処理してデータを整理して処理するのに問題があります。私はあなたの助けを求める。

データは次のとおりです。

PassengerId、生き残っ、PCLASS、名前、性別、年齢、SibSp、炒る、チケット、運賃、キャビンは、着手 1,0,3、「Braund、氏オーウェンHarris "、男性、22,1,0、A/5 21171,7.25、S

2,1,1" Cumings、Mrs. John Bradley(Florence Briggs、Florence Briggs Thayer) "、女性、38,1 、0、PC17599,71.2833、C85、C

3,1,3 "Heikkinen、Miss.Laina"、女性、26,0,0、STON/O2。 3101282,7.925、S

4,1,1、 "Futrelle、夫人ジャック・ヒース(リリー月 ピール)"、女性、35,1,0,113803,53.1、C123、S

5,0,3、 "アレン氏ウィリアム・ヘンリー"、男性、35,0,0,373450,8.05、S

私は、このような

として空のフィールドのエラーを得ました...、 ""、...(1行目、フィールド "キャビン")

私は空のフィールドでラインをフィルタリングしたい(私のRDDからそれらを削除する)、そして "このようなチケットを持っている行もA/5 21171(私はちょうどいいです)。

もう一度お返事ありがとうございます。 ;)

答えて

4

RDDではなく、特にScalaを初めてお使いの場合は、パフォーマンスと使いやすさを考慮してDataSetを使用することを検討してください。

val titanicDs = sparkSession.read 
    .option("header", true) 
    .csv("titanic.csv") 
    .na 
    .drop 
    .withColumn("TicketSplit", split($"Ticket", " ")) 
    .withColumn("Ticket", when(size($"TicketSplit") === "2", $"TicketSplit".getItem(1)).otherwise($"TicketSplit".getItem(0))) 
    .drop("TicketSplit") 

ここで起こっがたくさんある:

スパークが最初の行は、上の構造を課すヘッダで実現してtrueに headerオプションを設定し
  • DataSetアプローチを取ると、あなたはこれを行うことができますこれらの列名をDataFrameに使用します。
  • naメソッドは、欠損データを処理するためにvery helpfulというオブジェクトDataFrameNaFunctionsを返します。この場合、na.dropの組み合わせは、のいずれかのデータを含むすべての行を削除します(null)。
  • 私は素晴らしいfunctionslibraryという名前の新しい一時的な列を追加して、空白文字の生のTicketデータを長さ1(数字のみの場合)または2(テキストがある場合)の配列に分割しますその後にスペースと数字が続きます)。
  • Iは、TicketSplit列の配列の大きさに応じて生Ticketカラムを変更するfunctionsライブラリからwhenotherwiseを使用します。 TicketSplit列の配列のサイズに関係なく、最終的には、インデックス0の1要素配列の最初の要素またはインデックス2の2要素配列の2番目の要素を取得することによって、番号のみが保持されます。
  • DropそのTicketSplit欄はその目的にかなうためです。
  • 冷たい飲み物をお楽しみください。
+0

ありがとうございます! :) :)それは完全に私の問題を解決する。今、私はちょうどそこに値 "ヌル"と列の年齢にいくつかの未加工があると思うし、私は(あまりにも多くの情報を失うことはありません)平均でそれらを置き換えるしたいと思います。 fill-> fill(String value、String [] cols)という関数を読みましたが、fill( "average"、$ "Age")を書いたときに関数がオーバーロードしていることがわかりました。また、私は試しました:titanicDs.withColumn( "Age"、次に "col" "Age")。equalTo(null)、media))しかし、すべての値をnullに設定しています... .....もう一度お手伝いできますか?それは最後のハハハです。再度、感謝します! ;) – Borja

+0

喜んで助けてください。しかし、新しい質問を投稿して、将来同じことが起こるSparkユーザーのために答えが検索できるようにしてください。 – Vidya

+0

アップ!申し訳ありません、私はこれで新しいです。 – Borja