我有像下面这样的 JSON 对象..
{"name":"method1","parameter1":"P1","parameter2":"P2","parameter3":"P3","parameter4":"P4"}
{"name":"method2","parameter1":"P1","parameter2":"P2","parameter3":"P3","parameter4":"P4","parameter5":"P5","parameter6":"P6"}
我有不同的功能和不同的逻辑,比如波纹管
def method1(P1:String, P2:Int, P3:String, P4:String)={
println(p1)
println(p2)
println(p3)
println(p4)
}
def method2(P1:String, P2:Int, P3:String, P4:String,P5:String,P6:String)={
println(p1)
println(p2)
println(p3)
println(p4)
println(p6)
println(p5)
}
使用这个对象我必须调用我的方法。
例如,我的 JSON 对象包含第一个参数 method1,然后我必须method1(P1: String, P2: Int, P3: String, P4: String)
使用铰孔属性作为参数调用第一个函数(如)。
基于我的 JSON 第一个参数,我用剩余的参数调用了这个函数。请让我知道我怎样才能做到这一点?
这是使用dataframe
.
您有一个有效的json
格式,可以通过spark读取到dataframe
val df = sqlContext.read.json("path to the json file")
这应该给你dataframe
的
+-------+----------+----------+----------+----------+----------+----------+
|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|
+-------+----------+----------+----------+----------+----------+----------+-----------------+
我希望答案对您有所帮助,并且应该让您了解应该如何继续进行的总体思路。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句