当前位置: 首页 > 知识库问答 >
问题:

在spark java中将字符串数组转换为结构数组

太叔永新
2023-03-14

我有一堆json数据,格式如下

{"name": "Michael", "age": "30", "producta1": "blah1", "producta3": "blah2"}
{"name": "Michael", "age": "30", "producta1": "blah3", "producta3": "blah4"}
{"name": "Michael", "age": "30", "producta1": "blah5", "producta3": "blah6"}
{"name": "Andy", "age": "28", "producta1": "blah5", "producta3": "blah6"}
{"name": "Andy", "age": "28", "producta1": "blah6", "producta3": "blah6"}
{"name": "Andy", "age": "28", "producta1": "blah7", "producta3": "blah6"}
{"name": "Justin", "age": "12", "producta1": "blah5", "producta3": "blah6"}
{"name": "Justin", "age": "12", "producta1": "blah5", "producta3": "blah6"}

我下面的代码在spark中,我做了一些聚合,如下所示

 Dataset<Row> df = sc.read().json("/Users/g.bhageshpur/Downloads/spark-master/examples/src/main/examples/src/main/resources/people.json");

 df.createOrReplaceTempView("people");

 Dataset<Row> sqlDf = sc.sql("SELECT * FROM people");
 Dataset<Row> groupby = sqlDf.groupBy(new Column("name"), new Column("age"))
            .agg(org.apache.spark.sql.functions.collect_list("producta1"),
                    org.apache.spark.sql.functions.collect_list("producta3"))
                    .toDF("name","age","producta1","producta2");

上面的代码给了我一个类似于

+-------+---+--------------------+--------------------+
|   name|age|           producta1|           producta2|
+-------+---+--------------------+--------------------+
|   Andy| 28|[blah5, blah6, bl...|[blah6, blah6, bl...|
| Justin| 12|      [blah5, blah6]|      [blah6, blah6]|
|Michael| 30|[blah1, blah3, bl...|[blah2, blah4, bl...|
+-------+---+--------------------+--------------------+

我需要将producta1列中的上述数组值转换为json对象数组,类似于

[{"producta1": "blah5"},{"producta1": "blah6"},{"producta1": "blah7"}]
[{"producta1": "blah1"},{"producta1": "blah3"},{"producta1": "blah5"}]

我试过类似的方法

groupby.withColumn("newcolumn", functions.to_json(struct("producta1")));

上面的代码片段并没有给出我想要的结果。如何在spark java中实现Json对象数组?

共有1个答案

祁彬
2023-03-14

尝试下面的代码。

df
.groupBy($"name",$"age")
.agg(
    collect_list(to_json(struct("producta1"))).as("producta1"), // use to_json & struct functions here.
    collect_list(to_json(struct($"producta3"))).as("producta3") // use to_json & struct functions here.
).show(false)
+-------+---+---------------------------------------------------------------------+---------------------------------------------------------------------+
|name   |age|producta1                                                            |producta3                                                            |
+-------+---+---------------------------------------------------------------------+---------------------------------------------------------------------+
|Andy   |28 |[{"producta1":"blah5"}, {"producta1":"blah6"}, {"producta1":"blah7"}]|[{"producta3":"blah6"}, {"producta3":"blah6"}, {"producta3":"blah6"}]|
|Justin |12 |[{"producta1":"blah5"}, {"producta1":"blah5"}]                       |[{"producta3":"blah6"}, {"producta3":"blah6"}]                       |
|Michael|30 |[{"producta1":"blah1"}, {"producta1":"blah3"}, {"producta1":"blah5"}]|[{"producta3":"blah2"}, {"producta3":"blah4"}, {"producta3":"blah6"}]|
+-------+---+---------------------------------------------------------------------+---------------------------------------------------------------------+
 类似资料:
  • 问题内容: 我有一个; 我想转换为字符串数组。我该怎么做?有内置的Java函数吗?可以手动完成,但是我正在搜索Java内置函数。 我想要一个数组,其中字符串的每个字符都是一个字符串。像char’n’现在将是存储在数组中的字符串“ n”。 问题答案: 要开始你的作业,请在正则表达式上拆分字符串,该表达式可以为空字符串: 产生数组: 留空的第一条目留给读者练习:-) 注意:在Java 8中,不再包含空

  • 问题内容: 我需要将结果集转换为字符串数组。我正在从数据库中读取电子邮件地址,我需要能够像这样发送它们: 这是我的阅读电子邮件地址的代码: MyOutput是: 我需要这样: 我正在使用Oracle 11g。 问题答案: 获得所需的输出: 替换这些行 通过

  • 我有一个购物车php页面,在那里我显示客户端产品。在同一页中,我有一个表单,可以将客户的个人详细信息(如姓名、姓氏等)以及产品信息(如产品名称、数量等)直接发送到我的电子邮件地址。 现在,问题是,当我发送表单时,在我的电子邮件地址上,我收到了所有的信息,但没有产品细节,例如在订单电子邮件中的产品名称字段,我有ARRAY。 我看到将数组转换为字符串时出现问题,但我不知道如何转换,我尝试了几个示例,但

  • 问题内容: 我想将a转换为Character类的对象数组,但无法执行转换。我知道我可以使用该方法将String转换为原始数据类型类型为“ char”的数组,但这无助于将String转换为Character类型的对象数组。 我将如何去做? 问题答案: 用这个:

  • 问题内容: 我有以下代码,我试图通过测试,但似乎无法理解Java世界中各种编码形式。 我想我的问题是:将任意字节的字节数组转换为Java字符串,然后将同一Java String转换为另一个字节数组的正确方法是什么,该字节数组将具有与原始字节相同的长度和相同的内容数组? 问题答案: 尝试特定的编码: ideone链接

  • 问题内容: 因此基本上,用户是从扫描仪输入中输入序列。 等等。 它可以是任意长度,并且必须是整数。 我想将输入的字符串转换为整数数组。 所以会,就等 有什么提示和想法吗?我正在考虑实现获取先前的编号并将它们解析在一起,并将其应用于数组中的当前可用插槽。但是我不太确定如何编写代码。 问题答案: 您可以从扫描仪中读取整个输入行,然后将其分开,然后得到一个,将每个数字解析为与索引一对一匹配的…(假设输入