一尘不染

Spark Row转换为JSON

json

我想从Spark v.1.6(使用scala)数据帧创建JSON。我知道这样做很简单df.toJSON

但是,我的问题看起来有些不同。例如,考虑具有以下列的数据框:

|  A  |     B     |  C1  |  C2  |    C3   |
-------------------------------------------
|  1  | test      |  ab  |  22  |  TRUE   |
|  2  | mytest    |  gh  |  17  |  FALSE  |

我想最后有一个数据框

|  A  |     B     |                        C                   |
----------------------------------------------------------------
|  1  | test      | { "c1" : "ab", "c2" : 22, "c3" : TRUE }    |
|  2  | mytest    | { "c1" : "gh", "c2" : 17, "c3" : FALSE }   |

其中,C是含有JSON C1C2C3。不幸的是,我在编译时不知道数据框是什么样子(除了列A,列B始终是“固定的”)。

至于我为什么需要这个的原因:我正在使用Protobuf发送结果。不幸的是,我的数据框有时具有比预期更多的列,并且我仍然会通过Protobuf发送这些列,但是我不想在定义中指定所有列。

我该如何实现?


阅读 828

收藏
2020-07-27

共1个答案

一尘不染

Spark
2.1应该对此用例具有本机支持(请参阅#15354)。

import org.apache.spark.sql.functions.to_json
df.select(to_json(struct($"c1", $"c2", $"c3")))
2020-07-27