【发布时间】:2019-02-12 10:29:36
【问题描述】:
我需要向具有布尔值的数据框添加一个新列,评估数据框内的列。例如,我有一个数据框
+----+----+----+----+----+-----------+----------------+
|colA|colB|colC|colD|colE|colPRODRTCE| colCOND|
+----+----+----+----+----+-----------+----------------+
| 1| 1| 1| 1| 3| 39|colA=1 && colB>0|
| 1| 1| 1| 1| 3| 45| colD=1|
| 1| 1| 1| 1| 3| 447|colA>8 && colC=1|
+----+----+----+----+----+-----------+----------------+
在我的新专栏中,我需要评估 colCOND 的表达式是真还是假。
如果你有这样的东西很容易:
val df = List(
(1,1,1,1,3),
(2,2,3,4,4)
).toDF("colA", "colB", "colC", "colD", "colE")
val myExpression = "colA<colC"
import org.apache.spark.sql.functions.expr
df.withColumn("colRESULT",expr(myExpression)).show()
+----+----+----+----+----+---------+
|colA|colB|colC|colD|colE|colRESULT|
+----+----+----+----+----+---------+
| 1| 1| 1| 1| 3| false|
| 2| 2| 3| 4| 4| true|
+----+----+----+----+----+---------+
但我必须在每一行中计算一个不同的表达式,它在 colCOND 列内。
我想创建一个包含所有列的 UDF 函数,但我的真实数据框有很多列。我该怎么做?
谢谢大家
【问题讨论】:
-
你有解决办法吗?我在这里面临完全相同的问题。
-
@omnisius - 请看我的回答。谢谢你。
-
我打算用 Python 试试,非常感谢!
标签: scala apache-spark