消磨时间。在这里,以及在pyspark中的非熊猫场景中,我可以生成列值,该值是与相关列名连接的值,例如我提供的解决方案:Appending column name to column value using Spark。
然后,以下内容:
import org.apache.spark.sql.functions._
import spark.implicits._
val df = sc.parallelize(Seq(
("r1", 0.0, 0.0, 0.0, 0.0),
("r2", 6.4, 4.9, 6.3, 7.1),
("r3", 4.2, 0.0, 7.2, 8.4),
("r4", 1.0, 2.0, 0.0, 0.0)
)).toDF("ID", "aa1a", "bb3", "ccc4", "d1ddd")
val count_non_zero = df.columns.tail.map(x => when(col(x) === 0.0, 1).otherwise(0)).reduce(_ + _)
df.withColumn("non_zero_count", count_non_zero).show(false)
那么,如果仅出于参数考虑,
我还想检查一下实际列名是否在其名称中的某处包含“ 1”,作为添加1的附加条件。
我想在什么时候在val_count_non_zero中使用它?
我对生成列列表和要处理的序列不感兴趣。
正如我所说,这是出于争论的缘故。我在这里找不到在数据帧的时间范围内在Scala中进行列名检查的方法。
答案 0 :(得分:1)
如果我正确理解了您的要求,则可以Column
设置列名,并使用方法contains
包括其他条件:
val count_non_zero = df.columns.tail.map(x =>
when(lit(x).contains("1") && col(x) === 0.0, 1).otherwise(0)
).
reduce(_ + _)