首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅从get_json_object获得PySpark中的空值

仅从get_json_object获得PySpark中的空值
EN

Stack Overflow用户
提问于 2022-11-16 08:54:37
回答 1查看 72关注 0票数 3

我有一个Spark (在Palantir铸造)与列"c_temperature“。该列在每一行中都包含一个JSON字符串,其模式如下:

代码语言:javascript
复制
{"TempCelsiusEndAvg":"24.33","TempCelsiusEndMax":"null","TempCelsiusEndMin":"null","TempCelsiusStartAvg":"22.54","TempCelsiusStartMax":"null","TempCelsiusStartMin":"null","TempEndPlausibility":"T_PLAUSIBLE","TempStartPlausibility":"T_PLAUSIBLE"}

我尝试用以下代码提取新列"TempCelsiusEndAvg“和"TempCelsiusStartAvg”中的avg温度值(有时为"null“,有时为"24.33"):

代码语言:javascript
复制
from pyspark.sql import functions as F
from pyspark.sql.types import StringType

def flat_json(sessions_finished):
    df = sessions_finished
    df = df.withColumn("new_temperature", F.col('c_temperature').cast(StringType())
    df = df.withColumn("TempCelsiusEndAvg", F.get_json_object("c_Temperature", '$.TempCelsiusEndAvg'))
    df = df.withColumn("TempCelsiusStartAvg", F.get_json_object("c_Temperature", '$.TempCelsiusStartAvg'))
    return df

我想让新的专栏充满双打,比如:

代码语言:javascript
复制
... +-----------------+-------------------+ ...
... |TempCelsiusEndAvg|TempCelsiusStartAvg| ...
... +-----------------+-------------------+ ...
... |            24.33|              22.54| ...
... +-----------------+-------------------+ ...
... |            29.28|              25.16| ...
... +-----------------+-------------------+ ...
... |             null|               null| ...
... +-----------------+-------------------+ ...

新的dataframe包含列,但它们只填充空值。有人能帮我解决这个问题吗?

代码语言:javascript
复制
... +-----------------+-------------------+ ...
... |TempCelsiusEndAvg|TempCelsiusStartAvg| ...
... +-----------------+-------------------+ ...
... |             null|               null| ...
... +-----------------+-------------------+ ...
... |             null|               null| ...
... +-----------------+-------------------+ ...
... |             null|               null| ...
... +-----------------+-------------------+ ...

在这个线程中也有一个注释: https://stackoverflow.com/questions/46084158/how-can-you-parse-a-string-that-is-json-from-an-existing-temp-table-using-pyspar,它描述了我的问题,但是我不知道如何使用这些信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-16 11:07:10

您不需要做任何事情,因为列已经是一个结构。您可以通过使用.访问这些列来创建它们。

代码语言:javascript
复制
 df = df.withColumn("TempCelsiusEndAvg", F.col("c_temperature.TempCelsiusEndAvg"))
 df = df.withColumn("TempCelsiusStartAvg", F.col("c_temperature.TempCelsiusStartAvg"))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74457628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档