我有一个包含许多列的数据框,我将其转换为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 |
谢谢。
答案 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功能以满足您的逻辑