我有一个包含json字符串的数据框架df,如下所示,
'''[{"@id":"Party_1","@ObjectID":"Policy_1"},{"@id":"Party_2","@ObjectID":"Policy_2"},{"@id":"Party_3","@ObjectID":"Policy_3"}]'''
df 架构:
root
|-- col1: string (nullable = true)
如何将其转换为字符串数组(数组类型(字符串类型())?
结果应该是这样的,
['{"@id":"Party_1","@OriginatingObjectID":"Policy_1"}',
'{"@id":"Party_2","@OriginatingObjectID":"Policy_2"}',
'{"@id":"Party_3","@OriginatingObjectID":"Policy_3"}']
结果模式:
root
|-- arr_col: array (nullable = true)
| |-- element: string (containsNull = true)
任何帮助都将不胜感激。谢谢你!
您可以使用from_json函数获取json字段,只需对值进行轻微修改,如下所示
data = [
('[{"@id":"Party_1","@ObjectID":"Policy_1"},{"@id":"Party_2","@ObjectID":"Policy_2"},{"@id":"Party_3","@ObjectID":"Policy_3"}]', 2767),
('[{"@id":"Party_1","@ObjectID":"Policy_1"},{"@id":"Party_2","@ObjectID":"Policy_2"},{"@id":"Party_3","@ObjectID":"Policy_3"}]', 4235)
]
df = spark.createDataFrame(data).toDF(*["value", "count"])\
.withColumn("value", f.regexp_replace(f.col("value"), "\\[\\{", "{\"arr\": [{"))\
.withColumn("value", f.regexp_replace(f.col("value"), "\\}\\]", "}]}"))
json_schema = spark.read.json(df.rdd.map(lambda row: row.value)).schema
resultDF = df.select(f.from_json("value",
schema=json_schema).alias("array_col"))\
.select("array_col.*")
resultDF.printSchema()
resultDF.show(truncate=False)
或者,如果您希望嵌套json作为字符串,您可以使用自定义模式。
输出架构:
root
|-- arr: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- @ObjectID: string (nullable = true)
| | |-- @id: string (nullable = true)
输出:
+---------------------------------------------------------------+
|arr |
+---------------------------------------------------------------+
|[{Policy_1, Party_1}, {Policy_2, Party_2}, {Policy_3, Party_3}]|
|[{Policy_1, Party_1}, {Policy_2, Party_2}, {Policy_3, Party_3}]|
+---------------------------------------------------------------+
是否可以将StringType列强制转换为spark dataframe中的ArrayType列? A:数组(nullable=true)
我试图在我的数据集上运行PySpark中的FPGrowth算法。 我得到以下错误: 我的数据帧df格式如下: 如果“名称”列中的数据形式为: 如何在这个形式中从StringType转换为ArrayType 我从我的RDD形成了Dataframe:
我有一个字符串返回给我,其中包含转义字符。 这是一个示例字符串 " test\40gmail.com " 如您所见,它包含转义字符。我需要将其转换为其实际值,即 " test@gmail.com " 我该怎么做?
我有一个具有如下架构的数据帧 我已经有了上面的结果。 我想使用火花scala转换如下架构 请帮忙
问题内容: 我从HTML页面中将一个字符串输入到Java HTTPServlet中。根据我的要求,我得到了显示汉字的ASCII码: “可以告诉我” (无空格) 如何将该字符串转换为Unicode? HTML代码: Java代码: 如果我打印问题[0],则会得到以下值:“可以告&#3578
我有一个RestController类,它有一个方法可以根据电影的标题搜索电影: 如果我发送一个json字符串 从邮递员到endpoint,我收到一个空白的回复。 然后我做了一个 就在进入方法后找到字符串filmSearch正是我从邮递员发送的JSON字符串。我的应用程序没有看到JSON和提取值从filmSearch在我的请求附加到应用程序内字符串filmSearch. 如果我移除 在请求映射的一