Pandas df['col'].unique()
の代わりにpysparkデータフレームを提案してください。
Pysparkデータフレーム列のすべての一意の値をリストしたい。
SQL型の方法ではありません(registertemplateその後、個別の値のSQLクエリ)。
また、groupby->countDistinct
は必要ありませんが、代わりにその列の個別のVALUESを確認します。
次のデータ表現(k
とv
の2つの列で作業していると仮定しましょう。ここで、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データフレーム」を要求しました。ここで、次のSparkデータフレームを指定します。
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()]
これは、列の異なる値を取得するのに役立ちます。
df.select('column1').distinct().show()
df.dropDuplicates(['col1','col2'])
を使用して、配列内のcolXに基づいて個別の行のみを取得できます。
collect_setはpyspark.sql.DataFramedf.select(F.collect_set("column").alias("column")).first()["column"]
の特定の列から一意の値を取得するのに役立ちます