web-dev-qa-db-ja.com

pysparkでデータフレーム列の名前を取得する方法は?

パンダでは、これはcolumn.nameで実行できます。

しかし、sparkデータフレームの列を同じようにする方法は?

例えば呼び出し元プログラムにはsparkデータフレームがあります:spark_df

>>> spark_df.columns
['admit', 'gre', 'gpa', 'rank']

このプログラムは私の関数を呼び出します:my_function(spark_df ['rank'])my_functionには、列の名前、つまり 'rank'が必要です。

pandasデータフレームの場合、my_function内で使用できます

>>> pandas_df['rank'].name
'rank'
27
Kaushik Acharya

スキーマから名前を取得できます

spark_df.schema.names

スキーマを印刷すると、それを視覚化するのにも役立ちます

spark_df.printSchema()
46
David

唯一の方法は、基礎となるレベルをJVMに移動することです。

df.col._jc.toString().encode('utf8')

これは、pysparkコード自体でstrに変換される方法でもあります。

Pyspark/sql/column.pyから:

def __repr__(self):
    return 'Column<%s>' % self._jc.toString().encode('utf8')
8
numeral

データフレームの列名が必要な場合は、pyspark.sqlクラスを使用できます。 SDKが列名によるDFの明示的なインデックス付けをサポートしているかどうかはわかりません。私はこのトレースバックを受け取りました:

>>> df.columns['High'] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: list indices must be integers, not str

ただし、実行したデータフレームでcolumnsメソッドを呼び出すと、列名のリストが返されます。

df.columns['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']を返します

列のデータ型が必要な場合は、dtypesメソッドを呼び出すことができます。

df.dtypes[('Date', 'timestamp'), ('Open', 'double'), ('High', 'double'), ('Low', 'double'), ('Close', 'double'), ('Volume', 'int'), ('Adj Close', 'double')]を返します

特定の列が必要な場合は、インデックスでアクセスする必要があります。

df.columns[2]'High'を返します

3
Pat

答えはとても簡単だとわかりました...

// It is in Java, but it should be same in pyspark
Column col = ds.col("colName"); //the column object
String theNameOftheCol = col.toString();

変数「theNameOftheCol」は「colName」です

1
Yucci Mel