2017-10-20 6 views
0

私は 'df1'というデータフレームを持っていて、Xの行を持っています.1000と仮定します。私がしたいのは、そのデータフレームの具体的なサブサンプルを取得し、別のものとして保存することです。たとえば、 'df1'から400〜700の行を抽出し、 'df2'として保存したいとします。データフレームの具体的なサブサンプルを抽出し、pysparkの別のデータフレームに保存するにはどうすればよいですか?

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

しかし、私の質問は次のとおりです:

は、私は1つの可能な方法が持つベクトルとして「DF1」の内容を取得していることを知っているのデータをロードしないで、同じ結果を得るための他の方法がありますリスト?私は巨大なデータセットを持っていると、データを収集して別のデータフレームを生成して効率的にデータをロードできないことがあるため、これを尋ねます。

ありがとうございました。

+1

スパークには行番号がありません。 – mtoto

+0

いいえ、属性「IDENT」が増分の場合、行番号の表現に相当しますか? – jartymcfly

+0

これで 'filter()'を使うことができます – mtoto

答えて

0

Pysparkデータフレームにはインデックスがありません。作成することができますが、索引の作成前に実行されたシャッフル操作(groupjoin ...)が行の順序を変更した可能性があることに注意してください。

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:, :]) 
関連する問題