Apache spark 使用Spark中的相应列名(有条件地)更改数据框
我有一个名为products的数据框架,如下所示:Apache spark 使用Spark中的相应列名(有条件地)更改数据框,apache-spark,dataframe,apache-spark-sql,Apache Spark,Dataframe,Apache Spark Sql,我有一个名为products的数据框架,如下所示: Credit | Savings | Premium 1 0 1 0 1 1 1 1 0 所有列值都是字符串 我想把它转换成 Credit | Savings | Premium Credit 0 Premium 0 Savings Premium Credit Savings 0 火花 我在齐柏林飞艇中使
Credit | Savings | Premium
1 0 1
0 1 1
1 1 0
所有列值都是字符串
我想把它转换成
Credit | Savings | Premium
Credit 0 Premium
0 Savings Premium
Credit Savings 0
火花
我在齐柏林飞艇中使用Spark 1.6.2。我假设
信用、储蓄、溢价
是字符串列
import org.apache.spark.sql.functions._ // for `when`
df : DataFrame = .....
df.replace("Credit", ImmutableMap.of("1", "Credit"))
.replace("Savings ", ImmutableMap.of("1", "Savings "))
.replace("Premium", ImmutableMap.of("1", "Premium"));
另一方面,你也可以这样做
df.withColumn("Credit", udf1)
.withColumn("Savings ", udf2)
.withColumn("Premium", udf3)
其中udf1、2、3是spark UDF,用于将“1”转换为相应的列名
而不是udf。您可以在(cond,val)时使用,否则也可以使用(val)
语法
df.withColumn("Credit", when (df("Credit") === "1", lit("Credit")).otherwise(0)
.withColumn("Savings", when (df("Savings") === "1", lit("Savings ")).otherwise(0)
.withColumn("Premium", when (df("Premium") === "1", "Premium").otherwise(0)
就这些。。祝你好运:-)Hey@RamPrasad非常感谢你指出UDF。尝试了这个
code
val udf1=udf{(presence:String)=>if(presence=String,product:String)=>if(presence=String,product:String)=>if(presence=1)product else“0}code
Am试图为所有列创建一个单独的udf,方法如下val udf1=udf{(presence:String,product:String)=>if(presence=1)product else“0”)。但当我试图通过运行df.withColumn(“Credit”、udf1(sanderProdsmold(“Credit”)、“Credit”)
调用此udf时,发现了错误:String(“ind_cco_fin_ult2”)required:org.apache.spark.sql.Columnyes udf 1 2 3只是一个示例。您可以创建单个自定义项。无论您使用哪种字符串,您都可以使用像lit(“信用”)、lit(“储蓄”)、lit(“高级”)
lit
这样的字符串列,因为它是预期的列类型。太棒了!工作!谢谢你ramp@RamPrasad!!更新我的答案时,否则以及。请查收!正如@RamPrasad所指出的,他尝试了这个val udf1=udf{(presence:String)=>if(presence==“1”)“Credit”else“0”}
。成功了!现在,我试图为所有列创建一个单独的udf,方法是向udf函数传递一个附加参数,如下所示val udf1=udf{(presence:String,product:String)=>if(presence==“1”)product else“0”)df.withColumn(“Credit”,udf1(sanderprodsall(“Credit”),“Credit”)
发现错误:String(“ind_cco\u fin\u ult2”)必需:org.apache.spark.sql.Column