apache-spark - Spark : Set a column value based on multiple row conditions

标签 apache-spark dataframe apache-spark-sql

我有以下格式的数据框:

+----+---+-----+------+-----+------+
|AGEF|SEX|F0_34|F35_44|M0_34|M35_44|
+----+---+-----+------+-----+------+
|  30|  0|    0|     0|    0|     0|
|  94|  1|    0|     0|    0|     0|
|  94|  0|    0|     0|    0|     0|
|  94|  0|    0|     0|    0|     0|
|  94|  1|    0|     0|    0|     0|
|  44|  0|    0|     0|    0|     0|
|  66|  0|    0|     0|    0|     0|
|  66|  0|    0|     0|    0|     0|
|  74|  0|    0|     0|    0|     0|
|  74|  0|    0|     0|    0|     0|
|  29|  0|    0|     0|    0|     0|

现在根据列 AGEF 和 SEX 的值,我需要将 1 分配给相应的列名。每个列名称都是不言自明的,例如 F0_34 是 0 到 34 岁之间的女性,其他情况类似。

预期输出是
+----+---+-----+------+-----+------+
|AGEF|SEX|F0_34|F35_44|M0_34|M35_44|
+----+---+-----+------+-----+------+
|  30|  0|    1|     0|    0|     0|
|  94|  1|    0|     0|    0|     0|
|  94|  0|    0|     0|    0|     0|
|  94|  0|    0|     0|    0|     0|
|  94|  1|    0|     0|    0|     0|
|  44|  0|    0|     1|    0|     0|
|  66|  0|    0|     0|    0|     0|
|  66|  0|    0|     0|    0|     0|
|  74|  0|    0|     0|    0|     0|
|  74|  0|    0|     0|    0|     0|
|  29|  0|    1|     0|    0|     0|

提前致谢!!!

最佳答案

通常最有效的方法是直接对 SQL 表达式进行操作。例如:

def categorize(ageRanges: Seq[(Int, Int)], sexValues: Seq[(Int, String)]) = for {
  (ageL, ageH) <- ageRanges
  (sexV, sexL) <- sexValues
} yield ($"SEX" === sexL && $"AGEF".between(ageL, ageH)).alias(
  s"$sexL-$ageL-$ageH"
)

df.select(
  $"*" +: categorize(Seq((0, 34), (35, 44)), Seq((0, "F"), (1, "M"))): _*
)

关于apache-spark - Spark : Set a column value based on multiple row conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36466390/

相关文章:

apache-spark - 如何在 DataFrame Spark 1.6 中加载特定的 Hive 分区?

scala - 读取多个文件并收集是否会将它们带到 Spark 中的驱动程序

python - 使用 Python 或 pyspark 读取基于位置的 CSV 文件

python - 我想基于上一列添加一个新的 DataFrame 列,以便如果上一列元素与列表值匹配,则更改该值

python - Pandas:将行附加到列中具有多索引的DataFrame

Java:测试 spark-sql

apache-spark - Oozie shell 操作为 Spark 作业抛出 NullPointerException

apache-spark - 启动 Spark Shell 抛出 ClassNotFoundException

python - 如何比较Python中数据帧的行是否相等

python - pyspark : select columns with special characters from map type column