代码之家  ›  专栏  ›  技术社区  ›  Sai

Spark scala中基于json对象参数的调用方法?

  •  0
  • Sai  · 技术社区  · 7 年前

    我有如下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)
    } 
    

    使用这个对象,我必须调用我的方法。

    method1(P1: String, P2: Int, P3: String, P4: String) )以铰孔特性为参数。

    基于我的JSON第一个参数,我用剩余的参数调用了这个函数。 请告诉我如何实现这一点?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ramesh Maharjan    7 年前

    以下是使用 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|
    +-------+----------+----------+----------+----------+----------+----------+-----------------+
    

    我希望答案是有帮助的,并且应该给你更多关于应该如何进行的总体想法。