web-dev-qa-db-ja.com

pysparkデータフレームに異なる列の値を表示します:python

Pandas df['col'].unique()の代わりにpysparkデータフレームを提案してください。

Pysparkデータフレーム列のすべての一意の値をリストしたい。

SQL型の方法ではありません(registertemplateその後、個別の値のSQLクエリ)。

また、groupby->countDistinctは必要ありませんが、代わりにその列の個別のVALUESを確認します。

59
Satya

次のデータ表現(kvの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()]
64
eddies

これは、列の異なる値を取得するのに役立ちます。

df.select('column1').distinct().show()
114
Pabbati

df.dropDuplicates(['col1','col2'])を使用して、配列内のcolXに基づいて個別の行のみを取得できます。

10
seufagner

collect_setpyspark.sql.DataFramedf.select(F.collect_set("column").alias("column")).first()["column"]の特定の列から一意の値を取得するのに役立ちます

2
Hari Baskar