在pyspark dataframe中显示不同的列值:python

时间:2016-09-08 06:03:43

标签: pyspark pyspark-sql

请为Pandas df['col'].unique()建议使用pyspark数据帧替代方案。

我想列出pyspark数据帧列中的所有唯一值。

不是SQL类型的方式(registertemplate然后SQL查询不同的值)。

此外,我不需要groupby->countDistinct,而是要检查该列中的不同VALUES。

10 个答案:

答案 0 :(得分:100)

这应该有助于获得列的不同值:

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

答案 1 :(得分:58)

我们假设我们正在处理以下数据表示(两列kv,其中k包含三个条目,两个唯一:

+---+---+
|  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()]

答案 2 :(得分:10)

您可以使用df.dropDuplicates(['col1','col2'])根据阵列中的colX仅获取不同的行。

答案 3 :(得分:2)

collect_set 可以帮助从 pyspark.sql.DataFrame 的给定列中获取唯一值。 df.select(F.collect_set("column").alias("column")).first()["column"]

答案 4 :(得分:1)

如果要选择所有(列)数据作为DataFrame(df)的不同数据,则

var scores = [ { name: "Bob", score: 19 }, { name: "Harry", score: 27 }, { name: "Janelle", score: 35 } ] var ranks = [ { name: "Bob", rank: 3 }, { name: "Harry", rank: 2 }, { name: "Janelle", rank: 1 } ] const mergeArrays = (source, destination, key) => { return scores.map((score) => { let rank = ranks.find((rank) => rank[key] === score[key]) return Object.assign(score, rank) }) } console.log(mergeArrays(scores, ranks, 'name'))

答案 5 :(得分:1)

您可以做到

distinct_column = 'somecol' 

distinct_column_vals = df.select(distinct_column).distinct().collect()
distinct_column_vals = [v[distinct_column] for v in distinct_column_vals]

答案 6 :(得分:1)

让我们假设您的原始 DataFrame 名为 df。然后,您可以使用:

df1 = df.groupBy('column_1').agg(F.count('column_1').alias('trip_count'))
df2 = df1.sort(df1.trip_count.desc()).show()

答案 7 :(得分:0)

除了dropDuplicates选项外,还有pandas drop_duplicates中所命名的方法:

  

drop_duplicates() dropDuplicates()的别名。

示例

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

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

按子集拖放

s_df.drop_duplicates(subset = ['k']).show()

+---+---+
|  k|  v|
+---+---+
|bar|  2|
|foo|  1|
+---+---+
s_df.drop_duplicates().show()


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

答案 8 :(得分:0)

先运行

df.createOrReplaceTempView('df')

然后运行

spark.sql("""
    SELECT distinct
        column name
    FROM
        df
    """).show()

答案 9 :(得分:0)

如果您想查看数据框中特定列的不同值,则只需编写-

    df.select('colname').distinct().show(100,False)

这将显示df数据框中colname列的100个不同值(如果有100个值可用)。

如果您想对不同的值进行一些处理,可以将不同的值保存在向量中

    a = df.select('colname').distinct()

在这里,a将具有列colname的所有不同值