在pandas中,这可以通过column.name。
完成但是当它的spark数据框列如何做同样的事情?
e.g。调用程序有一个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'
答案 0 :(得分:38)
您可以通过
获取架构中的名称spark_df.schema.names
打印架构对于将其可视化也很有用
spark_df.printSchema()
答案 1 :(得分:8)
唯一的方法是将基础级别转移到JVM。
df.col._jc.toString().encode('utf8')
这也是它在pyspark代码中转换为str
的方式。
来自pyspark / sql / column.py:
def __repr__(self):
return 'Column<%s>' % self._jc.toString().encode('utf8')
答案 2 :(得分:2)
如果需要数据帧的列名,可以使用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 :(得分:0)
我发现答案非常简单...
// 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”
答案 4 :(得分:0)
Python
正如@numeral正确地说的那样,column._jc.toString()
在没有混淆的列的情况下工作正常。
对于别名列(即column.alias("whatever")
),即使不使用正则表达式str(column).split(" AS ")[1].split("`")[1]
也可以提取别名。
我不知道 Scala 语法,但是我敢肯定可以做到这一点。