Sat*_*tya 65 pyspark pyspark-sql
请为Pandas建议pyspark数据帧替代方案df['col'].unique().
我想列出pyspark数据帧列中的所有唯一值.
不是SQL类型的方式(registertemplate然后SQL查询不同的值).
我也不需要groupby->countDistinct,而是想检查该列中的不同VALUES.
小智 141
这应该有助于获得列的不同值:
df.select('column1').distinct().show()
Run Code Online (Sandbox Code Playgroud)
edd*_*ies 67
让我们假设我们正在使用以下数据表示(两列,k并且v,其中k包含三个条目,两个唯一:
+---+---+
| k| v|
+---+---+
|foo| 1|
|bar| 2|
|foo| 3|
+---+---+
Run Code Online (Sandbox Code Playgroud)
使用Pandas数据帧:
import pandas as pd
p_df = pd.DataFrame([("foo", 1), ("bar", 2), ("foo", 3)], columns=("k", "v"))
p_df['k'].unique()
Run Code Online (Sandbox Code Playgroud)
这返回一个ndarray,即array(['foo', 'bar'], dtype=object)
您要求为pandas df ['col']提供"pyspark数据帧替代方案.exclusive()".现在,给出以下Spark数据帧:
s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))
Run Code Online (Sandbox Code Playgroud)
如果你想从Spark 获得相同的结果,即ndarray使用toPandas():
s_df.toPandas()['k'].unique()
Run Code Online (Sandbox Code Playgroud)
或者,如果您不需要ndarray专门的,只需要列的唯一值列表k:
s_df.select('k').distinct().rdd.map(lambda r: r[0]).collect()
Run Code Online (Sandbox Code Playgroud)
最后,您还可以使用列表推导如下:
[i.k for i in s_df.select('k').distinct().collect()]
Run Code Online (Sandbox Code Playgroud)
Nid*_*dhi 20
如果您想查看数据框中特定列的不同值,您只需要编写以下代码。它将显示数据框中colname列的 100 个不同值(如果有 100 个值可用) df。
df.select('colname').distinct().show(100, False)
Run Code Online (Sandbox Code Playgroud)
如果你想对不同的值做一些奇特的事情,你可以将不同的值保存在向量中:
a = df.select('colname').distinct()
Run Code Online (Sandbox Code Playgroud)
seu*_*ner 12
您可以使用df.dropDuplicates(['col1','col2'])基于阵列中的colX仅获取不同的行.
muo*_*uon 12
你可以做
distinct_column = 'somecol'
distinct_column_vals = df.select(distinct_column).distinct().collect()
distinct_column_vals = [v[distinct_column] for v in distinct_column_vals]
Run Code Online (Sandbox Code Playgroud)
collect_set可以帮助从pyspark.sql.DataFrame的给定列中获取唯一值
df.select(F.collect_set("column").alias("column")).first()["column"]