Dataframe 如何将pyspark数据帧1x9转换为3x3

Dataframe 如何将pyspark数据帧1x9转换为3x3,dataframe,pyspark,transformation,Dataframe,Pyspark,Transformation,我正在使用pyspark数据帧。 我有一个df是1x9 范例 temp = spark.read.option("sep","\n").csv("temp.txt") 温度: 在不使用熊猫库的情况下,如何将其转换为包含列名称、年龄、城市的3x3数据帧 像这样: 姓名、年龄、城市 山姆,11岁,纽约 约翰,13岁,波士顿 我将以rdd的形式读取该文件,以利用zipWithIndex为数据添加索引 rdd = sc.textFile("t

我正在使用pyspark数据帧。 我有一个df是1x9

范例

temp = spark.read.option("sep","\n").csv("temp.txt")
温度:

在不使用熊猫库的情况下,如何将其转换为包含列名称、年龄、城市的3x3数据帧

像这样:

姓名、年龄、城市

山姆,11岁,纽约

约翰,13岁,波士顿


我将以
rdd
的形式读取该文件,以利用
zipWithIndex
为数据添加索引

rdd = sc.textFile("temp.txt")
我们现在可以使用截断除法来创建一个索引,用它将记录分组在一起。将此新索引用作
rdd
键。相应的
将是报头的元组,可以使用模数和实际值来计算。(请注意,
zipWithIndex
返回的索引将位于记录的末尾,这就是为什么我们使用
行[1]
作为分区/mod。)

接下来使用
reduceByKey
值添加到
元组中。这将为您提供一组键和值(按顺序)。使用
map
将其转换为
(保留列标题等)

最后使用
toDF()
转换为数据帧。您可以使用
select(header)
按所需顺序获取列

from operator import add
from pyspark.sql import Row

header = ["name", "age", "city"]

df = rdd.zipWithIndex()\
    .map(lambda row: (row[1]//3, (header[row[1]%3], row[0])))\
    .reduceByKey(add)\
    .map(lambda row: Row(**dict(zip(row[1][::2], row[1][1::2]))))\
    .toDF()\
    .select(header)

df.show()
#+----+---+-------+
#|name|age|   city|
#+----+---+-------+
#| sam| 11|newyork|
#|eric| 22|  texas|
#|john| 13| boston|
#+----+---+-------+

我将以
rdd
的形式读取该文件,以利用
zipWithIndex
为数据添加索引

rdd = sc.textFile("temp.txt")
我们现在可以使用截断除法来创建一个索引,用它将记录分组在一起。将此新索引用作
rdd
键。相应的
将是报头的元组,可以使用模数和实际值来计算。(请注意,
zipWithIndex
返回的索引将位于记录的末尾,这就是为什么我们使用
行[1]
作为分区/mod。)

接下来使用
reduceByKey
值添加到
元组中。这将为您提供一组键和值(按顺序)。使用
map
将其转换为
(保留列标题等)

最后使用
toDF()
转换为数据帧。您可以使用
select(header)
按所需顺序获取列

from operator import add
from pyspark.sql import Row

header = ["name", "age", "city"]

df = rdd.zipWithIndex()\
    .map(lambda row: (row[1]//3, (header[row[1]%3], row[0])))\
    .reduceByKey(add)\
    .map(lambda row: Row(**dict(zip(row[1][::2], row[1][1::2]))))\
    .toDF()\
    .select(header)

df.show()
#+----+---+-------+
#|name|age|   city|
#+----+---+-------+
#| sam| 11|newyork|
#|eric| 22|  texas|
#|john| 13| boston|
#+----+---+-------+

可以做到,但效率不高。效率不是问题。可以做到,但效率不高。效率不是问题。