scala - Spark Scala:如何向函数发送超过 10 列
问题描述
我正在寻找将多个 spark.sql.columns 发送到函数的理想方式的指针(没有单独提及它们)。目前我将单个列传递给函数以派生新列,但我需要将多个列发送到函数。关于如何选择特定列的任何建议说“Flag1”、“Flag2”等并作为结构或其他方式发送?并且能够访问被调用函数中的列名称及其值,类似于我在下面的函数中所做的事情?
例如:这里只提到 3 列,但我有大约 25 列以上,并且需要其中近 10 列才能使用。
var data = Seq(("10","value1","value2"), ("20","value2","value3"), ("30","value4","value5")).toDF( "id","Flag1","Flag2")
data.withColumn("newCol",doSomething($"Flag1")).show(5)
def doSomething(flag:Column): Column ={
when(flag.isNotNull && flag === lit("value4"),"abc")
.when(flag.isNotNull && flag === lit("vaue5"),"xyz")
.otherwise(lit("unknown"))
}
提前感谢您的指导。
解决方案
为什么你不在函数定义中有多个参数?
例如
data.withColumn("newcolumn", doSomething(data.columns.map(col)))
def doSomething(flags: Array[Column]): Column = {
flag1 = flags(0)
flag2 = flags(1)
when(flag1.isNotNull && flag2 === lit("value4"),"abc")
.when(flag1.isNotNull && flag2 === lit("vaue5"),"xyz")
.otherwise(lit("unknown"))
}
推荐阅读
- java - 处理多个请求时的 Apache Poi 性能问题
- node.js - 续集Nodejs中的CONCAT_WS
- java - 如何在 Java 中跟踪插入排序算法实现的持续时间?
- c++ - 限制多个模板参数友元函数可访问的类实例的范围
- android - 使用 Google Play 游戏接收成就时不显示弹出窗口
- tensorflow - Tensorflow:高级 api 估计器中的 Tensorboard
- android - Gradle 警告:您似乎正在尝试替换版本变量,但使用单引号 (')。尝试使用快速适配器库
- reactjs - 在 Axios.post 和调度操作之后,无法在 Redux Thunk 中执行回调
- python - 我们是否应该总是用列表理解替换 for 循环
- html - 减少 Bootstrap 中卡片标题的宽度