【问题标题】:How to count unique data occuring in multiple categorical columns from a pyspark dataframe如何计算 pyspark 数据框中多个分类列中出现的唯一数据
【发布时间】:2021-02-12 11:26:34
【问题描述】:

问题:

在基于 ML 的场景中,我试图查看推理文件中多列数据与提供给我进行训练的文件的出现情况。我只需要为分类变量找到它,因为数字属性是按比例缩放的。

期望:

我在标准 SQL 查询中执行以下操作取得了一些成功,但我希望将其移至 PySpark。

培训文件如下所示:

A B C Class
10 0.2 RDK AAA
10 0.2 RDK AAA
10 0.2 RDK AAA
10 1.3 USW ACA
10 1.3 USW ACA
10 1.3 USW ACA
8 0.2 RDK BBV
8 0.1 RDJ BBR
10 0.2 RDK AAA
10 5.1 RDK AAA
8 0.1 RDJ BBR
8 0.1 RDJ BBR
10 5.1 RDK AAA
10 5.1 RDK AAA
8 0.1 RDJ BBR
8 0.1 RDJ BBR

并使用 sql 我能够获得所需的输出。但是请注意,我只匹配 Col A 和 C,因为它们本质上是分类的:

select a.A, a.B, a.C, b.prediction, a.Class count(1) as distr_count from train_file a left outer join test_file b 
on a.A = b.A 
and a.C = b.C
group by a.A, a.C

期望的输出:

A B C prediction Class distr_count
10 0.2 RDK AAA AAA 7
10 1.3 USW ACA AAA 3
8 0.2 RDK BBV BBR 1
8 0.1 RDJ BBR BBR 5
10 5.1 RDK AAA AAA 7
7 1.2 SSW BBR XXX 0

【问题讨论】:

  • 您的查询应该被编译器拒绝,因为BclassSELECT 中,但不在GROUP BY 中。
  • @GordonLinoff 是的,这是可能的,因为我已尝试将我的实际数据和查询最小化以便理解。请根据您的感觉更新,同时我会更新查询。

标签: python sql pyspark group-by


【解决方案1】:
df = train_file.join(test_file, on=['A', 'C'], how='left_outer')
group_df = df.groupBy(['A', 'C']).agg(f.count('class'))

【讨论】:

  • count() 不能带任何参数。注意:我在 PySpark 中需要这个。
  • Ferraira,嘿伙计,那个 .count() 对我有用,显然两者都成功了,但我坚持使用“.count()”,而不是“.agg() "方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 2018-12-18
相关资源
最近更新 更多