基于值的 Spark-scan 数据框

Spark- scan data frame base on value

我正在尝试根据某个值查找列(我确实知道该列的名称)。例如,在下面的数据框中,我想知道哪一行有一列包含 yellow for Category = A 。问题是我事先不知道列名(颜色)所以我做不到 select * where Category = 'A' and colour = 'yellow' 我怎样才能扫描列并实现这个?非常感谢您的帮助。

+--------+-----------+-------------+
|Category|colour     |.      name. |
+--------+-----------+-------------+
|A.      |      blue.|         Elmo|
|A       |    yellow |         Alex|
|B       |      desc |         Erin|
+--------+-----------+-------------+

您可以循环检查列名列表。出于可读性的目的,您还可以将此循环包装在一个函数中。请注意,每列的检查将按顺序进行。

from pyspark.sql import functions as F

cols = df.columns

for c in cols:
    cnt = df.where((F.col('Category') == 'A') & (F.col(c) == 'yellow')).count()
    if cnt > 0:
        print(c)