Json Pyspark-从具有最小值和最大值范围的数组中获取值
我正在尝试用PySpark编写一个查询,它将从数组中获得正确的值 例如,我有一个名为df的数据框架,它有三列,“companyId”、“companySize”和“weightingRange”。“companySize”列只是员工人数。“weightingRange”列是一个数组,其中包含以下内容Json Pyspark-从具有最小值和最大值范围的数组中获取值,json,pyspark,databricks,azure-databricks,Json,Pyspark,Databricks,Azure Databricks,我正在尝试用PySpark编写一个查询,它将从数组中获得正确的值 例如,我有一个名为df的数据框架,它有三列,“companyId”、“companySize”和“weightingRange”。“companySize”列只是员工人数。“weightingRange”列是一个数组,其中包含以下内容 [ {"minimum":0, "maximum":100, "weight":123}, {"minimum":101, "maximum":200, "weight":456}, {"m
[ {"minimum":0, "maximum":100, "weight":123},
{"minimum":101, "maximum":200, "weight":456},
{"minimum":201, "maximum":500, "weight":789}
]
因此,数据帧看起来像这个权重范围,如上图所示,在下面的示例中它被截断,以便更清晰地格式化
+-----------+-------------+------------------------+--+
| companyId | companySize | weightingRange | |
+-----------+-------------+------------------------+--+
| ABC1 | 150 | [{"maximum":100, etc}] | |
| ABC2 | 50 | [{"maximum":100, etc}] | |
+-----------+-------------+------------------------+--+
因此,对于公司规模=150的条目,我需要将权重456返回到名为“公司权重”的列中
因此,它应该显示以下内容
+-----------+-------------+------------------------+------------------+
| companyId | companySize | weightingRange | companyWeighting |
+-----------+-------------+------------------------+------------------+
| ABC1 | 150 | [{"maximum":100, etc}] | 456 |
| ABC2 | 50 | [{"maximum":100, etc}] | 123 |
+-----------+-------------+------------------------+------------------+
我已经看过了
df.withColumn("tmp",explode(col("weightingRange"))).select("tmp.*")
然后加入,但尝试应用,将笛卡尔数据
感谢您的建议 你可以这样接近 首先创建一个示例数据帧 导入pyspark.sql.F函数 df=spark.createDataFrame[ 'ABC1',150,[{min:0,max:100,weight:123}, {最小值:101,最大值:200,重量:456}, {最小值:201,最大值:500,重量:789}], 'ABC2',50,[{min:0,max:100,weight:123}, {最小值:101,最大值:200,重量:456}, {最小值:201,最大值:500,重量:789}]], ['companyId'、'companySize'、'weightingRange'] 然后,创建一个udf函数并将其应用于每一行以获得新列 def获取权重wt,权重: 对于以重量表示的数据: 如果_d['min']12…| 123| +-----+------+----------+--------+
你能展示一个数据样本吗?此数组是否在每行中重复?@mayankagrawal根据请求添加了样本。对每一行重复该数组。