我有List [N],如下所示
attach(mtcars)
plot(mpg ~ hp)
abline(v = 170)
text(x = 180, y = 25, label = "Your text here!", srt = 90)
其中N可以是任意数量的元素。
我有一个val check = List ("a","b","c","d")
只有一个名为“value”的列。基于值的内容,我需要创建N列,列名作为列表中的元素,列内容为dataframe
我尝试了所有可能的方法,例如substring(x,y)
,withColumn
,没有任何效果。
请考虑selectExpr
其中X和Y是基于某些元数据的某些数字
下面是我尝试的不同代码,但没有一个有效,
substring(X,Y)
testDF2只有最后一列d而其他列如a,b,c未添加到表中
val df = sqlContext.read.text("xxxxx")
val coder: (String => String) = (arg: String) => {
val param = "NULL"
if (arg.length() > Y )
arg.substring(X,Y)
else
val sqlfunc = udf(coder)
val check = List ("a","b","c","d")
for (name <- check){val testDF2 = df.withColumn(name, sqlfunc(df("value")))}
这会引发错误
请帮助如何使用列名作为List
中的元素动态添加DF中的列我期待下面的Df
var z:Array[String] = new Array[String](check.size)
var i=0
for ( x <- check ) {
if ( (i+1) == check.size) {
z(i) = s""""substring(a.value,X,Y) as $x""""
i = i+1}
else{
z(i) = s""""substring(a.value,X,Y) as $x","""
i = i+1}}
val zz = z.mkString(" ")
df.alias("a").selectExpr(s"$zz").show()
答案 0 :(得分:1)
您可以使用例如this回复用户6910411从列表中动态添加列到类似的问题(有关更多可能性,请参阅她/他的完整答案):
val newDF = check.foldLeft(<yourdf>)((df, name) => df.withColumn(name,<yourUDF>$"value"))