Mic*_*l N 3 python dataframe apache-spark pyspark
我有一个 PySpark DataFrame
Col1 Col2 Col3
0.1 0.2 0.3
Run Code Online (Sandbox Code Playgroud)
我想获取至少一行满足条件的列名,例如一行大于 0.1
在这种情况下,我的预期结果应该是:
[Co2 , Co3]
Run Code Online (Sandbox Code Playgroud)
我无法提供任何代码,因为我真的不知道该怎么做。
只是count满足谓词(内部select)的项目并处理结果:
from pyspark.sql.functions import col, count, when
[c for c, v in df.select([
count(when(col(c) > 0.1, 1)).alias(c) for c in df.columns
]).first().asDict().items() if v]
Run Code Online (Sandbox Code Playgroud)
一步步:
聚合 ( DataFrame-> DatFrame):
df = sc.parallelize([(0.1, 0.2, 0.3)]).toDF()
counts = df.select([
count(when(col(c) > 0.1, 1)).alias(c) for c in df.columns
])
Run Code Online (Sandbox Code Playgroud)
from pyspark.sql.functions import col, count, when
[c for c, v in df.select([
count(when(col(c) > 0.1, 1)).alias(c) for c in df.columns
]).first().asDict().items() if v]
Run Code Online (Sandbox Code Playgroud)collect的first Row:
a_row = counts.first()
Run Code Online (Sandbox Code Playgroud)
df = sc.parallelize([(0.1, 0.2, 0.3)]).toDF()
counts = df.select([
count(when(col(c) > 0.1, 1)).alias(c) for c in df.columns
])
Run Code Online (Sandbox Code Playgroud)转换为 Python dict:
a_dict = a_row.asDict()
Run Code Online (Sandbox Code Playgroud)
DataFrame[_1: bigint, _2: bigint, _3: bigint]
Run Code Online (Sandbox Code Playgroud)并在 value 为真时迭代其项目,保留 key:
[c for c, v in a_dict.items() if v]
Run Code Online (Sandbox Code Playgroud)
或明确检查计数:
[c for c, v in a_dict.items() if v > 0]
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1505 次 |
| 最近记录: |