如何解决在Pyspark中转换数据框同一行,不同列中的列表
我从数据框的列中得到了一个列表:
list_recs = [row[0] for row in df_recs.select("name").collect()]
列表如下:
Out[243]: ['COL-4560','D65-2242','D18-4751','D68-3303']
我想将其转换为一个新的数据帧,该数据帧的值在另一列中。我尝试这样做:
from pyspark.sql import Row
rdd = sc.parallelize(list_recs)
recs = rdd.map(lambda x: Row(SKU=str(x[0]),REC_01=str(x[1]),REC_02=str(x[2]),REC_03=str(x[3])))#,REC_04=str(x[4]),REC_0=str(x[5])))
schemaRecs = sqlContext.createDataFrame(recs)
但是我得到的结果是:
+---+------+------+------+
|SKU|REC_01|REC_02|REC_03|
+---+------+------+------+
| C| O| L| -|
| D| 6| 5| -|
| D| 1| 8| -|
| D| 6| 8| -|
+---+------+------+------+
我想要的东西:
+----------+-------------+-------------+-------------+
|SKU |REC_01 |REC_02 |REC_03 |
+----------+-------------+-------------+-------------+
| COL-4560| D65-2242| D18-4751| D68-3303|
+----------+-------------+-------------+-------------+
我也尝试过spark.createDataFrame(lista_recs,StringType())
,但所有项目都放在同一列中。
谢谢。
解决方法
定义模式并使用spark.createDataFrame()
list_recs=['COL-4560','D65-2242','D18-4751','D68-3303']
from pyspark.sql.functions import *
from pyspark.sql.types import *
schema = StructType([StructField("SKU",StringType(),True),StructField("REC_01",StructField("REC_02",StructField("REC_03",True)])
spark.createDataFrame([list_recs],schema).show()
#+--------+--------+--------+--------+
#| SKU| REC_01| REC_02| REC_03|
#+--------+--------+--------+--------+
#|COL-4560|D65-2242|D18-4751|D68-3303|
#+--------+--------+--------+--------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。