[解決済み] spark DataFrameのカラムをpythonのリストに変換する
2022-06-03 22:27:18
質問
mvvとcountの2つの列を持つdataframeで作業しています。
+---+-----+
|mvv|count|
+---+-----+
| 1 | 5 |
| 2 | 9 |
| 3 | 3 |
| 4 | 1 |
mvvの値とcountの値を含む2つのリストを取得したいと思います。次のようなものです。
mvv = [1,2,3,4]
count = [5,9,3,1]
ということで、以下のコードを試してみました。最初の行は、行の Python リストを返すはずです。私は最初の値を見たかったのです。
mvv_list = mvv_count_df.select('mvv').collect()
firstvalue = mvv_list[0].getInt(0)
でも、2行目でエラーメッセージが出ます。
AttributeError: getIntです。
どのように解決するのですか?
なぜ、この方法がうまくいかないのかを見てみましょう。まず、整数を取得しようとしているのは 行 タイプで、コレクトの出力は次のようになります。
>>> mvv_list = mvv_count_df.select('mvv').collect()
>>> mvv_list[0]
Out: Row(mvv=1)
このようなものを取ると
>>> firstvalue = mvv_list[0].mvv
Out: 1
を取得します。
mvv
の値を取得します。もし、配列の全ての情報が欲しければ、このようなものを取ることができます。
>>> mvv_array = [int(row.mvv) for row in mvv_list.collect()]
>>> mvv_array
Out: [1,2,3,4]
しかし、他の列で同じことを試すと、こうなります。
>>> mvv_count = [int(row.count) for row in mvv_list.collect()]
Out: TypeError: int() argument must be a string or a number, not 'builtin_function_or_method'
このようなことが起こるのは
count
は組み込みのメソッドだからです。そして、カラムは同じ名前を持つ
count
. これを行うための回避策は、カラム名を
count
を
_count
:
>>> mvv_list = mvv_list.selectExpr("mvv as mvv", "count as _count")
>>> mvv_count = [int(row._count) for row in mvv_list.collect()]
しかし、辞書構文を使用してカラムにアクセスできるため、この回避策は必要ありません。
>>> mvv_array = [int(row['mvv']) for row in mvv_list.collect()]
>>> mvv_count = [int(row['count']) for row in mvv_list.collect()]
そして、ついに動くようになるのです
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
python call matlab メソッドの詳細
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない