2017-02-03 2 views
0

密なベクトルを取り、個々の列に分割する関数を実行しようとしています。PySpark DenseVectorを大きなデータセットの個々の列に分割する

dfには、列として 'ID'と 'feature'が含まれています。以下のコードは、フォームに変換します:IDを、ときに私_2、_3、_4 ... _2、_3「機能」を分割する時に作成されます列の列ベクトル

def extract(row): 
    return (row.ID,) + tuple(float(x) for x in row.feature.values) 
df = df.rdd.map(extract).toDF(["ID"]) 

あるこのコードが失敗した場所ほぼ100万のIDを持つdf全体で実行します。

しかし、100行のサンプルを取得して同じコードを実行すると、完全に機能します。私が理解する限り、これは記憶上の問題です。より大きなデータセットでこれを行う効率的な方法は何でしょうか?どんな助けもありがとう。エラーメッセージ: Spark Error Snapshot

最新の編集:DFが作成される前に何のヌルを持っていないDFので、データクリーニングおよび前処理、たまたま私が2.0+

編集スパークを使用しています。

追加情報:このリンクHow to explode columns?には私の質問に対するスカラーベースの回答があります。これはpysparkで実装できますか?

+0

あなたのエラー情報によると、私は@Chobeatの判断が正しいと思います。たぶんあなたのデータを最初にチェックし、データクリーニングのいくつかの操作を行う必要があります。それに対する更新はありますか? –

+0

私が欲しいものを達成する良い方法はありますか?基本的に、 'n'値を持つベクトルをn個の列に分割する必要があります。 –

答えて

1

エラーの該当する部分はキーが見つかりません:3.0。

すべての有効な入力があるため、データセット全体でシステムを破壊する行がある可能性があるので、99.99%はサンプルで動作することを確信しています。さまざまな原因が考えられますが、スキーマと内容を確認してrowを調べると、問題の調査に役立ちます。

+0

親切に編集を確認してください。スキーマは次のとおりです。id:Double、features:Vector –

関連する問題