将pySpark将array列展开为pandas单独列

这篇博客介绍了如何在pyspark中将含有数组的列展开,转换为pandas DataFrame时每一维度变为单独列。通过获取数据的第一行确定数组长度,然后遍历数组列并使用withColumn方法展开每一维,最后将展开后的列与原始列一起转换为pandas DataFrame。
摘要由CSDN通过智能技术生成

将pySpark将array列展开为pandas单独列

写在前面的话

这一系列主要记录我工作中遇到的一些问题,以及相应的解决办法。希望对大家能有帮助。

pyspark列展开

假设我们的数据中有4列,col_A,col_B,col_C和col_D,其中列A和列B都是数组列,我们需要将这两列进行展开,数组中的每一维都展开为一列。代码如下:

#获取数据中的第一行,主要是为了获取数组长度
first_row = raw_data.first()
#数组列
array_cols = ['col_A', 'col_B']
#存储展开后的列名
columns = []
columns.append("col_C")
columns.append("col_D")
for col in array_cols:
	#对于每一个数组列首先计算该数组的长度
    numAttrs = len(first_row[col])
    print("新增列的个数", numAttrs)
    #生成每一维的名字,attrs表示展开后每一维的名字
    attrs = spark.sparkContext.parallelize([col + str(i) for i in range(numAttrs)]).zipWithIndex().collect()
    #将每一维都展开展开为单独的一维,
    for name, index in attrs:
        raw_data = raw_data.withColumn(name, raw_data[col].getItem(index))
        columns.append(name)
transData = raw_data[columns]

之后我们可以使用toPandas(),方法直接将spark的dataframe转化为pandas().

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值