- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从嵌套的 pyspark DataFrame 生成一个 json 字符串,但丢失了键值。我的初始数据集类似于以下内容:
data = [
{"foo": [1, 2], "bar": [4, 5], "buzz": [7, 8]},
{"foo": [1], "bar": [4], "buzz": [7]},
{"foo": [1, 2, 3], "bar": [4, 5, 6], "buzz": [7, 8, 9]},
]
df = spark.read.json(sc.parallelize(data))
df.show()
## +---------+---------+---------+
## | bar| buzz| foo|
## +---------+---------+---------+
## | [4, 5]| [7, 8]| [1, 2]|
## | [4]| [7]| [1]|
## |[4, 5, 6]|[7, 8, 9]|[1, 2, 3]|
## +---------+---------+---------+
然后我使用 arrays_zip 将每一列压缩在一起:
df_zipped = (
df
.withColumn(
"zipped",
F.arrays_zip(
F.col("foo"),
F.col("bar"),
F.col("buzz"),
)
)
)
df_zipped.printSchema()
root
|-- bar: array (nullable = true)
| |-- element: long (containsNull = true)
|-- buzz: array (nullable = true)
| |-- element: long (containsNull = true)
|-- foo: array (nullable = true)
| |-- element: long (containsNull = true)
|-- zipped: array (nullable = true)
| |-- element: struct (containsNull = false)
| | |-- foo: long (nullable = true)
| | |-- bar: long (nullable = true)
| | |-- buzz: long (nullable = true)
问题是在压缩数组上使用 to_json。它丢失了 foo、bar 和 buzz 键值,而是将键保存为元素索引
(
df_zipped
.withColumn("zipped", F.to_json("zipped"))
.select("zipped")
.show(truncate=False)
)
+-------------------------------------------------------------+
|zipped |
+-------------------------------------------------------------+
|[{"0":1,"1":4,"2":7},{"0":2,"1":5,"2":8}] |
|[{"0":1,"1":4,"2":7}] |
|[{"0":1,"1":4,"2":7},{"0":2,"1":5,"2":8},{"0":3,"1":6,"2":9}]|
+-------------------------------------------------------------+
如何保留“bar”、“buzz”和“foo”而不是 0、1、2?
最佳答案
手动指定架构也可以:对于 foo、bar 和 buzz 字段,必须命名元素顶部的数组,而不是实际的数据字段本身
data = [
{"foo": [1, 2], "bar": [4, 5], "buzz": [7, 8]},
{"foo": [1], "bar": [4], "buzz": [7]},
{"foo": [1, 2, 3], "bar": [4, 5, 6], "buzz": [7, 8, 9]},
]
df = spark.read.json(sc.parallelize(data))
df.show()
+---------+---------+---------+
| bar| buzz| foo|
+---------+---------+---------+
| [4, 5]| [7, 8]| [1, 2]|
| [4]| [7]| [1]|
|[4, 5, 6]|[7, 8, 9]|[1, 2, 3]|
+---------+---------+---------+
然后手动定义并转换为模式:
schema = StructType([
StructField("foo", IntegerType()),
StructField("bar", IntegerType()),
StructField("buzz", IntegerType()),
])
df_zipped = (
df_test
.select(
F.arrays_zip(
F.col("foo"),
F.col("bar"),
F.col("buzz"),
)
.alias("zipped")
)
.filter(F.col("zipped").isNotNull())
.select(F.col("zipped").cast(ArrayType(schema)))
)
这会产生所需的解决方案:
(
df_zipped
.withColumn("zipped", F.to_json("zipped"))
.select("zipped")
.show(truncate=False)
)
+----------------------------------------------------------------------------------+
|zipped |
+----------------------------------------------------------------------------------+
|[{"foo":1,"bar":4,"buzz":7},{"foo":2,"bar":5,"buzz":8}] |
|[{"foo":1,"bar":4,"buzz":7}] |
|[{"foo":1,"bar":4,"buzz":7},{"foo":2,"bar":5,"buzz":8},{"foo":3,"bar":6,"buzz":9}]|
+----------------------------------------------------------------------------------+
注意:在模式中转换为 LongType 不起作用
关于python - PySpark to_json 丢失了数组中结构的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63816830/
我有一个 Ruby 脚本,可以将哈希值转换为 json 并将其写入文件。我使用 to_json 方法。 在文件中,我得到以下结果: {"name":"Bob","age":42} 我将此脚本复制到我的
如何将to_json输出中的字段值由null改为""? 它目前返回 {"name":"priya","mobile":null} 我想要 {"name":"priya","mobile":""} 或
我正在使用 Sinatra 并尝试通过使用“json”gem 并调用 .to_json 方法以 JSON 格式输出对象。我希望输出为 JSON,其中包含 attr_reader 部分中的符号及其值。
我正在尝试为一个副项目创建一个 super 简单的 JSON 网络服务。但是,我在将我的对象转换为 JSON 时遇到了一些问题,有人可以帮助我吗? 我有以下类(class): class Locati
我有一个 Python 代码可以正确处理一个包含 20 行的文件,但是当我尝试发送包含 60.000 条记录的同一文件时,它显示“108936 段错误”。 有什么办法可以避免这个错误,这是我的机器吗?
我写了一个 plpgsql 脚本,它在一个字符串中生成一个 json 对象数组,但是在我使用 to_json() 方法将一个带有该字符串的变量传递给它之后,它返回一个双引号的结果,并且每个双引号字符都
我正在尝试从嵌套的 pyspark DataFrame 生成一个 json 字符串,但丢失了键值。我的初始数据集类似于以下内容: data = [ {"foo": [1, 2], "bar":
我想这样做: y = 0.2 => y = 0.200 x = 0.24524452 => x = 0.245 我提出了以下请求,在逗号后面保留 3 个数字 pd.opt
我有一个包含电影数据的“.csv”文件,我正在尝试将其重新格式化为 JSON 文件以在 MongoDB 中使用它。所以我将该 csv 文件加载到 pandas DataFrame 中,然后使用 to_
在我的 Controller 中: @arr = [] @jsonPosts = Post.each do |p| arrLatLng = {} arrLatLng["latitude"] =
我在使用 bsoncxx 将 bson 文档转换为 json 字符串时遇到困难。bsoncxx::to_json 函数返回一个“无效”/损坏的 std::string 对象。我无法读取其中的字符,当
我在处理 JSON 字符串输出时遇到问题。我正在使用制表符分隔的 CSV 文件,它看起来像这样: date time loc_id country name sub
出于某种原因,pandas to_json 函数正在将数据帧的索引转换为字符串。有没有办法避免这种情况? >>> import pandas as pd >>> df = pd.DataFrame({
dataframe中日期的原始形式是: Date 2018-09-1
我正在构建一个基于 Sinatra 的 API,我发现我的用户模型有一些奇怪的响应。每个响应都会返回一个充满空值的集合。其他模型按预期返回。 irb(main):018:0> User => User
我有一个 pandas 系列,其中包含从日-月-年字符串创建的日期时间对象 series = pd.Series(['3/11/2000', '3/12/2000', '3/13/2000']) se
我注意到了这种行为,但不确定这是一个错误。我创建了一个包含 2 个整数列和 1 个浮点列的数据框 import pandas as pd df = pd.DataFrame([[1,2,0.2],[3
首先,我没有使用 Rails。我在这个项目中使用 Sinatra 和 Active Record。 我希望能够在我的模型类上覆盖 to_json 或 as_json 并让它定义一些“默认”选项。例如我
我正在尝试实现 wysihml5在使用 Activerecord 的 sinatra 应用程序中。 富文本编辑器运行良好,当我提交表单时,我将正确的 html 发布到 Controller : pry
我有一个使用 Ruby 标准库中的 Set 类的数据结构。我希望能够将我的数据结构序列化为 JSON 字符串。 默认情况下,Set 序列化为数组: >> s = Set.new [1,2,3] >>
我是一名优秀的程序员,十分优秀!