把它放在scala上

vuktfyat  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(396)

大家好,我正在Dataframe中阅读scala a json,如下所示:

  1. {
  2. "key": {
  3. "code": "1"
  4. },
  5. "data": {
  6. "array": [
  7. {
  8. "type": "a",
  9. "bool": true
  10. }
  11. ]
  12. }
  13. }

然后我需要生成一个dataframe,其中包含以下列:key\u code和data\u array,当data\u array columns有值时(作为字符串):

  1. [
  2. {
  3. "type": "a",
  4. "bool": true
  5. }
  6. ]

key\u code列没有问题,但是对于data\u array,我遇到了一个问题。。。我试着这样编码:

  1. dataFrame
  2. .withColumn(
  3. "data_array",
  4. explode(col("data.array"))
  5. )
  6. .withColumn("DATA_ARRAY", col("data_array").cast("String"))

但我得到了[“a”,真的]而不是我提到的预期结果,有人能帮我吗?
谢谢!

cuxqih21

cuxqih211#

尝试 to_json 函数来自 Spark-2.2 ```
df.show()
//+-------------+---+
//| data|key|
//+-------------+---+
//|[true, a]|[1]|
//+-------------+---+

import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._

df.withColumn("key_code",col("key.code")).
withColumn("da",explode(col("data.array"))).
withColumn("DATA_ARRAY",to_json(array(col("da")))).
drop("data","key","da").
show(false)

//or using selectExpr
df.selectExpr("key.code","explode(data.array)").
selectExpr("code","to_json(array(col)) as data_array").show(false)

//+--------+--------------------------+
//|key_code|DATA_ARRAY |
//+--------+--------------------------+
//|1 |[{"bool":true,"type":"a"}]|
//+--------+--------------------------+

展开查看全部

相关问题