请为Pandas df['col'].unique()
建议使用pyspark数据帧替代方案。
我想列出pyspark数据帧列中的所有唯一值。
不是SQL类型的方式(registertemplate然后SQL查询不同的值)。
此外,我不需要groupby->countDistinct
,而是要检查该列中的不同VALUES。
答案 0 :(得分:100)
这应该有助于获得列的不同值:
df.select('column1').distinct().show()
答案 1 :(得分:58)
我们假设我们正在处理以下数据表示(两列k
和v
,其中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的所有不同值