パンダでは、これは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'
スキーマから名前を取得できます
spark_df.schema.names
スキーマを印刷すると、それを視覚化するのにも役立ちます
spark_df.printSchema()
唯一の方法は、基礎となるレベルをJVMに移動することです。
df.col._jc.toString().encode('utf8')
これは、pysparkコード自体でstr
に変換される方法でもあります。
Pyspark/sql/column.pyから:
def __repr__(self):
return 'Column<%s>' % self._jc.toString().encode('utf8')
データフレームの列名が必要な場合は、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'
を返します
答えはとても簡単だとわかりました...
// 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」です