web-dev-qa-db-ja.com

Sparkで列ヘッダーを割り当てて使用するにはどうすればよいですか?

私は以下のようにデータセットを読んでいます。

 f = sc.textFile("s3://test/abc.csv")

私のファイルには50以上のフィールドが含まれており、スクリプトの後半で参照するために、各フィールドに列ヘッダーを割り当てたいと思います。

PySparkでそれを行うにはどうすればよいですか? DataFrameはここに行く方法ですか?

PS-スパークの初心者。

6
GoldenPlatinum

この質問の解決策は、実行しているSparkのバージョンによって異なります。Spark 2.0+を使用していると仮定すると、CSVを次のように読み込むことができます。 DataFrameと、RDDをDataFrameに変換するのに適したtoDFを使用して列を追加しますOR既存のデータフレームに列を追加します。

filename = "/path/to/file.csv"
df = spark.read.csv(filename).toDF("col1","col2","col3")
5
BushMinusZero

DataFrameを使用して列名を追加する方法は次のとおりです。

Csvに区切り文字「、」があると仮定します。 DataFrameに転送する前に、次のようにデータを準備します。

_f = sc.textFile("s3://test/abc.csv")
data_rdd = f.map(lambda line: [x for x in line.split(',')])
_

データに3つの列があるとします。

_data_rdd.take(1)
[[u'1.2', u'red', u'55.6']]
_

これで、toDF()を使用してこのRDDをDataFrameに転送するときに、列名を指定できます。

_df_withcol = data_rdd.toDF(['height','color','width'])

df_withcol.printSchema()

    root
     |-- height: string (nullable = true)
     |-- color: string (nullable = true)
     |-- width: string (nullable = true)
_

列名を指定しない場合、デフォルトの列名「_1」、「_ 2」、...のDataFrameを取得します。

_df_default = data_rdd.toDF()

df_default.printSchema()

    root
     |-- _1: string (nullable = true)
     |-- _2: string (nullable = true)
     |-- _3: string (nullable = true)
_
5
Ida
f = sc.textFile("s3://test/abc.csv") <br />
header = f.first()

header will give you as below:-<br />
u'col1,col2,col3'  --> for example taking 3 columns name

head = str(header).split(",") <br />
head will give you a list<br/>
['col1','col2','col3']

fDF = f.filter(lambda row: row!=header).map(lambda x: str(x).split(",")).toDF(head)<br/>
fdF.show() <br/>

必要に応じて、ヘッダーとデータフレーム内のデータを提供します。

0
Vinod Kumar