2017-10-20 54 views
0

我有一个名为'df1'的数据框,它有X行,假设为1000.我想要做的是获得该数据框的具体子采样并保存为另一个。例如,我想从'df1'中提取400到700行并将其保存为'df2'。如何提取数据框的具体子样本并保存在pyspark中的另一个数据框中?

我知道,一个可能的方式越来越“DF1”的内容与载体:

list = df1.collect() 
subsample = list[400:700] 
df2 = sc.createDataFrame(subsample, attributes) 

但我的问题是:是否有越来越不加载数据的相同结果的任何其他方式一个列表?我这样问,因为当你有一个巨大的数据集时,使用collect和产生另一个数据框可能不会有效地加载数据。

谢谢。

+1

没有行号的星火。 – mtoto

+0

不,但是如果你有一个增量的'IDENT'属性,相当于一个行号的表示? – jartymcfly

+0

然后你可以使用'filter()' – mtoto

回答

0

Pyspark数据框没有索引。您可以创建一个,但请注意,在创建索引之前发生的任何随机操作(group,join ...)可能已更改行的顺序。

import pyspark.sql.functions as psf 
start = 400 
end = 700 
df2 = df1.rdd.zipWithIndex()\ 
    .map(lambda l: [l[1]] + list(l[0]))\ 
    .toDF(["index"] + df1.columns)\ 
    .filter(psf.col("index").between(start, end)) 

另一种方式是只收集你的数据框的第一行到一个列表:

df2 = spark.createDataFrame(df1.head(end)[start:], df1.columns) 

或使用Pandas

df2 = spark.createDataFrame(df1.limit(end).toPandas().iloc[start:, :]) 
相关问题