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

如何在不传递 pyspark json 中的父属性的情况下访问嵌套属性

邵畅
2023-03-14

我试图使用pyspark访问以下json的内部属性

[
 {
    "432": [
        {
            "atttr1": null,
            "atttr2": "7DG6",
            "id":432,
            "score": 100
        }
    ]
},
 {
    "238": [
        {
            "atttr1": null,
            "atttr2": "7SS8",
            "id":432,
            "score": 100
        }
    ]
}
]

在输出中,我正在寻找以下形式的csv atttr1、atttr2、id、分数null、“7DG6”、432,100 null、“7SS8”、238,100

我知道我可以像下面这样得到这些细节,但我不想在lambda表达式中传递432或238,因为在bigger json中这(斜体)会有所不同。我想迭代所有可用的值。

print(inputDF.rdd.map(lambda x:(x['*432*'])).first())
print(inputDF.rdd.map(lambda x:(x['*238*'])).first())

我还尝试注册一个名为“test”的临时表,但它给出了一个错误,并显示消息element._id不存在。

inputDF.registerTempTable("test")
srdd2 = spark.sql("select element._id from test limit 1")

任何帮助将不胜感激。我正在使用火花 2.4

共有1个答案

柴晔
2023-03-14

在不使用 pyspark 功能的情况下,您可以像这样操作:

data = json.loads(json_str)  # or whatever way you're getting the data

columns = 'atttr1 atttr2 id score'.split()
print(','.join(columns))  # headers

for item in data:
    for obj in list(item.values())[0]:  # since each list has only one object
        print(','.join(str(obj[col]) for col in columns))

输出:

atttr1,atttr2,id,score
None,7DG6,432,100
None,7SS8,432,100

for item in data:
    obj = list(item.values())[0][0]  # since the object is the one and only item in list
    print(','.join(str(obj[col]) for col in columns))

仅供参考,您可以将它们存储在变量中或将其写出 csv 而不是/并打印它。

如果你只是想把它转储到csv,看看这个答案。

 类似资料:
  • 问题内容: 我可以在没有jQuery的情况下访问数据属性吗? 使用jQuery很容易,但是如果没有jQuery,我在任何地方都看不到该怎么做。 如果我在Google上搜索“没有jQuery”,那么我得到的只是jQuery示例。 可能吗 问题答案: 在这里,我找到了这个例子: 因此,它看起来非常可行。

  • 描述 (Description) 您可以通过使用“。”连接访问路径的属性名来访问bean的嵌套属性的值。 分隔符。 您可以使用以下方法获取和设置Nested属性的值: PropertyUtils.getNestedProperty(Object, String) PropertyUtils.setNestedProperty(Object, String, Object) 参数: Object :

  • 这是我的目标: 我不知道我收到myObj的内容。我有一个字符串变量,表示我需要的值的键。看起来像这样: 如何使用此字符串变量从对象获取值? 显而易见的猜测是行不通的: 编辑:我希望有一个比这个例子更灵活的解决方案。也就是说,我可能需要深入到另一个层次,点符号可能会被加入到混合中。我用的是有角度的。js,并认为一定有什么东西已经做到了这一点。

  • 问题内容: 我在elasticsearch中的索引具有以下映射: 源文档如下: 我正在尝试使用距离脚本来基于地理点计算距离。我在elasticsearch结果中发现了该帖子的Return distance吗?帮我 我正在尝试获取所有结果,按半径1km进行过滤,获取距离,然后对geo_point进行排序。查询的结构如下: 我收到状态为500的以下错误: 我尝试以这种方式重写查询: 然后我得到这个错误

  • 怎么可以让这个 self.logger 属于子类(不是直接添加到子类属性这种方式),并且可以运行