我将如何将数据框的一部分转换为 json 对象 [重复]

Posted

技术标签:

【中文标题】我将如何将数据框的一部分转换为 json 对象 [重复]【英文标题】:How will I convert part of a dataframe to an json object [duplicate] 【发布时间】:2018-02-16 08:03:14 【问题描述】:

假设我有一个这样的数据框

val df = Seq((2012, 8, "Batman", 9.8), (2012, 8, "Hero", 8.7), (2012, 7, "Robot", 5.5), (2011, 7, "Git", 2.0)).toDF("year", "month", "title", "rating")

我可以像这样将整行转换为 json。

val jsonColumns = df.select("year", "month", "title", "rating").toJSON

我怎样才能让json和年份中的月份、年份和标题脱离json对象,但仍然是数据框的一部分(所以我可以将它用作分区列)?

【问题讨论】:

【参考方案1】:

我怎样才能让json和年份中的月份、年份和标题脱离json对象,但仍然是数据框的一部分(所以我可以将它用作分区列)

你可以使用to_jsonstruct内置函数作为

import org.apache.spark.sql.functions._
df.select(to_json(struct(col("year"), col("month"), col("title"))).as("json"), col("year"))

你应该得到输出为

+----------------------------------------+----+
|json                                    |year|
+----------------------------------------+----+
|"year":2012,"month":8,"title":"Batman"|2012|
|"year":2012,"month":8,"title":"Hero"  |2012|
|"year":2012,"month":7,"title":"Robot" |2012|
|"year":2011,"month":7,"title":"Git"   |2011|
+----------------------------------------+----+

更新

to_json 函数将返回一个 json 字符串。如果您需要 json 对象,则不需要 to_json 函数。相反,您可以执行以下操作

df.select(struct(col("year"), col("month"), col("title")).as("json"), col("year")).toJSON

【讨论】:

大君,谢谢。现在,当我将数据写入具有严格对象的表时,这是不可能的。因为它只是一个字符串,而不是一个 json 对象。你能告诉我如何转换这个对象并将其加载到结构列中。 @Srinivas,在这种情况下不要使用 to_json 函数。只需将 struct 用作​​df.select(struct(col("year"), col("month"), col("title")).as("json"), col("year")).toJSON 就可以了。它不是马哈拉詹,它是马哈拉詹。我来自尼泊尔。 @Maharjan,感谢您的回复。当我尝试这个时,所有的双引号都是反斜杠,如 \"year\",因此配置单元表无法读取数据。抱歉输入你的名字有误,我以为你的名字是南印度人。 我不使用 hive,所以我不能告诉你确切的解决方案。当我写入文本文件时,它工作正常。您是否尝试删除 .toJSON @Maharjan,你是对的,在我的机器上也是如此。这是 Hive 无法破译 \.我会尝试编写类似 json 解析器的东西。

以上是关于我将如何将数据框的一部分转换为 json 对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

React:如何将 JSON 对象转换为数组并渲染它?

将 pandas 数据帧转换为 json 对象 - pandas

如何将内容不同但结构相同的 JSON 字符串转换为 C# 对象?

Python每日一练——数据存储第四关:如何将一个Python对象转换为对应的JSON字符串

将firebase json转换为打字稿数组

Python面试必考重点之数据存储第四关——如何将一个Python对象转换为对应的JSON字符串