【发布时间】:2019-03-09 08:07:46
【问题描述】:
我正在研究这个极好的问题,以提高我的 Scala 技能和答案:Extract a column value and assign it to another column as an array in spark dataframe
我创建了修改后的代码,如下所示,但还有几个问题:
import spark.implicits._
import org.apache.spark.sql.functions._
val df = sc.parallelize(Seq(
("r1", 1, 1),
("r2", 6, 4),
("r3", 4, 1),
("r4", 1, 2)
)).toDF("ID", "a", "b")
val uniqueVal = df.select("b").distinct().map(x => x.getAs[Int](0)).collect.toList
def myfun: Int => List[Int] = _ => uniqueVal
def myfun_udf = udf(myfun)
df.withColumn("X", myfun_udf( col("b") )).show
+---+---+---+---------+
| ID| a| b| X|
+---+---+---+---------+
| r1| 1| 1|[1, 4, 2]|
| r2| 6| 4|[1, 4, 2]|
| r3| 4| 1|[1, 4, 2]|
| r4| 1| 2|[1, 4, 2]|
+---+---+---+---------+
有效,但是:
- 我注意到 b 列被放入了两次。
- 我也可以在第二条语句的 a 列中输入,得到相同的结果。例如。那是什么意思呢?
df.withColumn("X", myfun_udf( col("a") )).show
- 如果我输入 col ID,那么它会变为 null。
- 那么,我想知道为什么要输入第二个列?
- 如何使这对所有列都通用?
所以,这是我在别处看过的代码,但我遗漏了一些东西。
【问题讨论】:
标签: apache-spark