以下是使用
dataframe
.
你有一个有效的
json
可通读的格式
火花
变成一个
数据帧
val df = sqlContext.read.json("path to the json file")
应该给你的
数据帧
像
+-------+----------+----------+----------+----------+----------+----------+
|name |parameter1|parameter2|parameter3|parameter4|parameter5|parameter6|
+-------+----------+----------+----------+----------+----------+----------+
|method1|P1 |P2 |P3 |P4 |null |null |
|method2|P1 |P2 |P3 |P4 |P5 |P6 |
+-------+----------+----------+----------+----------+----------+----------+
现在,我通过更改
基本数据类型
到
column
和
印刷
已更改为
串联
传递的字符串数。
import org.apache.spark.sql.Column
import org.apache.spark.sql.functions._
def method1(P1:Column, P2:Column, P3:Column, P4:Column)={
concat_ws(",", P1, P2, P3, P4)
}
def method2(P1:Column, P2:Column, P3:Column, P4:Column,P5:Column,P6:Column)={
concat_ws(",", P1, P2, P3, P4, P5, P6)
}
根据上填充的值,可以调用这两个方法
name
列使用
when
df.withColumn("methodCalling", when($"name" === "method1", method1($"parameter1",$"parameter2",$"parameter3",$"parameter4"))
.otherwise(when($"name" === "method2", method2($"parameter1",$"parameter2",$"parameter3",$"parameter4",$"parameter5",$"parameter6"))))
.show(false)
这应该给你
+-------+----------+----------+----------+----------+----------+----------+-----------------+
|name |parameter1|parameter2|parameter3|parameter4|parameter5|parameter6|methodCalling |
+-------+----------+----------+----------+----------+----------+----------+-----------------+
|method1|P1 |P2 |P3 |P4 |null |null |P1,P2,P3,P4 |
|method2|P1 |P2 |P3 |P4 |P5 |P6 |P1,P2,P3,P4,P5,P6|
+-------+----------+----------+----------+----------+----------+----------+-----------------+
我希望答案是有帮助的,并且应该给你更多关于应该如何进行的总体想法。