更新列值数组[Row]

时间:2017-04-24 12:44:45

标签: scala apache-spark apache-spark-sql

我有一个包含许多列的数据框,我将其转换为Array[Row] 使用收集:

var table = df.collect()

之后,我尝试循环进入并修改某些列的值

  for(i <- 0 to dfEleve.length-1){
        var value = dfEleve.apply(i).getAs("uid")
  }

我搜索如何更新列的值。

输入:

|Name  | age | uid |
--------------------   
|David | 25  |     |
|Jean  | 20  |     |

输出

|Name  | age | uid       |
--------------------------  
|David | 25  |   uip154  |
|Jean  | 20  |   uaz214  |

谢谢。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题:您想要更新/修改数据框的某些列,那么我建议您使用udf函数并使用udf函数调用withColumn函数。
例如:
对于你问题中的输入和输出:

import sqlContext.implicits._
val df = Seq(("David", 25, ""), ("Jean", 20, "")).toDF("Name", "age", "uid")
df.withColumn("uid", testUdf(df("Name")))


import org.apache.spark.sql.functions.udf
def testUdf = udf((value: String) => {
    if(value.equalsIgnoreCase("David")) "uip154"
    else if(value.equalsIgnoreCase("Jean")) "uaz214"
    else ""
  })

您可以编辑testUdf功能以满足您的逻辑