我目前正在Scala中编写一个脚本,为此,我预编码了一个函数,如下所示:
def reducer_scala(node: (Int, List[Int])): (List[(Int, Int)], Int) = {
var counter = 0
var minimum = node._1
var value_List = List.empty[Int]
var joined = List.empty[(Int, Int)]
for(value <- node._2){
if(value < minimum){
minimum = value
}
value_List :+= value
}
if(minimum<node._1){
joined = joined :+ (node._1, minimum)
for(value <- value_List){
if(minimum != value){
counter = counter + 1
joined = joined :+ (value, minimum)
}
}
}
return (joined, counter)
}
正如您所看到的,它将Int和List[Int]的元组作为输入。
我现在想把它应用到我的Dataframe中的两列,如下所示:
_1, collect_list(_2)
0| [1]|
| 1| [2, 3, 0]|
| 3| [4, 1]|
| 5| [6]|
| 6| [7, 5]|
| 2| [1]|
| 4| [3]|
| 7| [6]
如您所见,第一列是Int,第二列是List。
我想知道:-如何转换并重新组合同一元组中两列的每个元素-如何将reducer_scala函数应用于每个元素(Tuple(element_column_1,element_cocolumn_2((
致以最诚挚的问候
select()
函数使您能够将udf应用于数据帧的每一行,并使用col("colname")
选择所需的列你只需要稍微调整一下你的函数,让它接受两个独立的参数,而不是一个元组。
确保您的功能已注册为udf,例如:
val reducer = udf {(x: Int, y: List[Int]) => reducer_scala(x, y)}
然后用df = df.select(reducer(col("colname1"), col("colname2")))
调用
希望这能有所帮助!