1. ホーム
  2. python

[解決済み] pyspark のデータフレームで個別の列の値を表示する

2022-03-03 17:02:11

質問

pysparkのdataframeで、Pandasと同等のことをするにはどうしたらいいでしょうか? df['col'].unique() .

pysparkのdataframeカラムにあるユニークな値をすべてリストアップしたいのですが。

SQLタイプの方法(registertemplateの後、distinct valuesのSQLクエリ)ではない。

また groupby では countDistinct その代わりに、そのカラムの異なるVALUESをチェックしたいのです。

どのように解決するのですか?

次のようなデータ表現があるとします(2列。 kv ここで k には3つの項目があり、そのうち2つは一意である。

+---+---+
|  k|  v|
+---+---+
|foo|  1|
|bar|  2|
|foo|  3|
+---+---+

Pandasのデータフレームで。

import pandas as pd
p_df = pd.DataFrame([("foo", 1), ("bar", 2), ("foo", 3)], columns=("k", "v"))
p_df['k'].unique()

これは ndarray は、すなわち array(['foo', 'bar'], dtype=object)

pandas df['col'].unique()" に代わるpyspark dataframeが必要とのことですが、これはどのようなものですか?さて、次のようなSparkのdataframeがあるとします。

s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))

もし 同じ の結果、つまり、Sparkの ndarray を使用します。 toPandas() :

s_df.toPandas()['k'].unique()

あるいは ndarray の一意な値のリストが欲しいだけです。 k :

s_df.select('k').distinct().rdd.map(lambda r: r[0]).collect()

最後に、以下のようにリスト内包を使うこともできます。

[i.k for i in s_df.select('k').distinct().collect()]