我正在研究I
python和Spark,我有一个RDD,我从中形成一个列表.现在从这个列表中我想形成一个数据框,它有父列表中的多列但这些列不是连续的.我写了这个,但似乎工作错了:
list1 = rdd.collect()
columns_num = [1,8,11,17,21,24]
df2 = [list[i] for i in columns_num]
上面的代码只从父列表中选择6行,只有第1列数据,并形成具有这6列1数据的新数据帧.
如何从另一个列表中创建具有多个不连续列的新数据框
例如这样:
rdd = sc.parallelize([("a", 1, 2, 4.0, "foo"), ("b", 3, 4, 5.0, "bar")])
columns_num = [0, 3]
df = rdd.toDF()
df2 = df.select(*(df.columns[i] for i in columns_num))
df2.show()
## +---+---+
## | _1| _4|
## +---+---+
## | a|4.0|
## | b|5.0|
## +---+---+
或者像这样:
df = rdd.map(lambda row: [row[i] for i in columns_num]).toDF()
df.show()
## +---+---+
## | _1| _4|
## +---+---+
## | a|4.0|
## | b|5.0|
## +---+---+
在一方面,你不应该只是为了重塑收集数据.在最好的情况下它会很慢,在最坏的情况下它会崩溃.