如何在PySpark中对嵌套数组执行pop与melt操作
你遇到的TypeError: 'Column' object is not callable报错,是因为PySpark的Column对象没有pandas Series的values.tolist()方法,且你对explode的调用方式不符合PySpark的语法规则。
要实现和你提供的pandas代码同等的效果,可以使用posexplode函数完成数组拆分与索引生成,再拆分单个gps元素为多列,具体实现代码如下:
from pyspark.sql.functions import posexplode, col # posexplode会同时返回数组元素的索引(对应melt后的variable列)和元素本身 df2 = df.select("ifa", posexplode("gps").alias("variable", "gps_item")) \ .select( "ifa", "variable", col("gps_item")[0].alias("0"), col("gps_item")[1].alias("1"), col("gps_item")[2].alias("2") # 若gps子数组还有更多字段,按对应索引继续添加即可 )
运行上述代码得到的输出结构和你给出的预期示例完全一致。
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

