Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Pyspark-从具有最小值和最大值范围的数组中获取值_Json_Pyspark_Databricks_Azure Databricks - Fatal编程技术网

Json Pyspark-从具有最小值和最大值范围的数组中获取值

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

我正在尝试用PySpark编写一个查询,它将从数组中获得正确的值

例如,我有一个名为df的数据框架,它有三列,“companyId”、“companySize”和“weightingRange”。“companySize”列只是员工人数。“weightingRange”列是一个数组,其中包含以下内容

[ {"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根据请求添加了样本。对每一行重复该数组。