如何 select 列表中的多个非连续列到 python 中的另一个数据框
How to select multiple non-contigous columns from a list into another dataframe in python
我正在研究 Ipython
和 Spark
,我有一个 RDD
,我从中形成了一个 list
。现在从这个 list
我想形成一个 dataframe
它有来自父 list
的多列但是这些列不连续。我写了这个,但它似乎工作不对:
list1 = rdd.collect()
columns_num = [1,8,11,17,21,24]
df2 = [list[i] for i in columns_num]
上面的代码只从父 list
中选择 6 行,只有第 1 列数据,并用这 6 列第 1 数据形成新的 dataframe
。
如何使用来自另一个 list
的多个不连续列形成一个新的 dataframe
例如像这样:
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|
## +---+---+
另一方面,您永远不应该为了重塑而收集数据。在最好的情况下它会很慢,在最坏的情况下它只会崩溃。
有了 Optimus,这真的很容易。您只需要安装它:
pip install optimuspyspark
然后导入它(它会为你启动 Spark):
import optimus as op
让我们创建 DF:
rdd = sc.parallelize([("a", 1, 2, 4.0, "foo"), ("b", 3, 4, 5.0, "bar")])
df = rdd.toDF()
并启动变压器:
transformer = op.DataFrameTransformer(df)
还有select你的专栏
df_new = transformer.select_idx([0,2]).df
你现在拥有了它:
df_new.show()
+---+---+
| _1| _3|
+---+---+
| a| 2|
| b| 4|
+---+---+
我正在研究 Ipython
和 Spark
,我有一个 RDD
,我从中形成了一个 list
。现在从这个 list
我想形成一个 dataframe
它有来自父 list
的多列但是这些列不连续。我写了这个,但它似乎工作不对:
list1 = rdd.collect()
columns_num = [1,8,11,17,21,24]
df2 = [list[i] for i in columns_num]
上面的代码只从父 list
中选择 6 行,只有第 1 列数据,并用这 6 列第 1 数据形成新的 dataframe
。
如何使用来自另一个 list
dataframe
例如像这样:
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|
## +---+---+
另一方面,您永远不应该为了重塑而收集数据。在最好的情况下它会很慢,在最坏的情况下它只会崩溃。
有了 Optimus,这真的很容易。您只需要安装它:
pip install optimuspyspark
然后导入它(它会为你启动 Spark):
import optimus as op
让我们创建 DF:
rdd = sc.parallelize([("a", 1, 2, 4.0, "foo"), ("b", 3, 4, 5.0, "bar")])
df = rdd.toDF()
并启动变压器:
transformer = op.DataFrameTransformer(df)
还有select你的专栏
df_new = transformer.select_idx([0,2]).df
你现在拥有了它:
df_new.show()
+---+---+
| _1| _3|
+---+---+
| a| 2|
| b| 4|
+---+---+