【问题标题】:How to wrap spark streaming output in array brackets?如何将火花流输出包装在数组括号中?
【发布时间】:2018-10-28 20:58:37
【问题描述】:

Spark:2.3.0 Scala:2.11.12

我正在使用 spark 结构流从一个 kafka 主题流式传输并将结果输出到另一个 kafka 主题。

val mySchema = StructType(StructField("foo", StringType, true) :: Nil)

输入数据[{"foo":"bar"}]

当我使用select(from_json(col(A), mySchema)) 方法时,它会从数组内部解析对象并将其放置在我的架构中。

我正在尝试做的是在过滤数据帧转换结束时,将 mySchema 包装在一个数组中,以便输出看起来相同:[{"foo":"bar"}]

但是,我只能得到结果 Dataframe 来输出没有数组括号:{"foo":"bar"}

【问题讨论】:

    标签: scala apache-spark spark-structured-streaming


    【解决方案1】:

    您需要重新定义架构,因为您希望将输入视为struct 类型的数组,即array<struct<foo:string>>

    val mySchema = ArrayType(StructType(Seq(StructField("foo", StringType, true))),true)
    val target = df.select(from_json(col("A"), mySchema).alias("A"))
    
    target.printSchema
    //root
    // |-- A: array (nullable = true)
    // |    |-- element: struct (containsNull = true)
    // |    |    |-- foo: string (nullable = true)
    
    target.select(to_json($"A")).show
    //+----------------+
    //|structstojson(A)|
    //+----------------+
    //| [{"foo":"bar"}]|
    //+----------------+
    

    【讨论】:

    • 啊,太简单了!我尝试了很多其他的东西,但不是这个。非常感谢!
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多