Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用Spark中的相应列名(有条件地)更改数据框_Apache Spark_Dataframe_Apache Spark Sql - Fatal编程技术网

Apache spark 使用Spark中的相应列名(有条件地)更改数据框

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 火花 我在齐柏林飞艇中使

我有一个名为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
火花


我在齐柏林飞艇中使用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