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))
方法时,它从数组内部解析对象并将其放在我的模式中。
我想做的是在过滤dataFrame转换的最后,将mySchema
包装在一个数组中,以便输出看起来是一样的:[{"foo":"bar"}]
但是,我只能在没有数组括号的情况下输出结果Dataframe
:{"foo":"bar"}
答案 0 :(得分: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"}]|
//+----------------+