我来自pandas背景,习惯于从CSV文件中读取数据到数据框并通过简单的命令将列名更改为有用的内容:
df.columns = new_column_name_list
然而,使用sqlContext创建的PySpark数据框不适用于相同的方法。 我能想到的唯一解决办法如下:
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', inferschema='true', delimiter='\t').load("data.txt")
oldSchema = df.schema
for i,k in enumerate(oldSchema.fields):
k.name = new_column_name_list[i]
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', delimiter='\t').load("data.txt", schema=oldSchema)
这基本上是定义变量两次,首先推断模式,然后重命名列名,然后使用更新后的模式再次加载数据框。
是否有更好、更有效的方法来做到这一点,就像我们在Pandas中所做的那样?
我的Spark版本是1.5.0
for
循环和withColumnRenamed
来完成,但是你的reduce
选项非常好 :) - Felipe Gerardfrom functools import reduce
。 - joaofbsmdf.select('id').withColumnRenamed('id', 'new_id')
和spark.sql("SELECT id AS new_id FROM df")
。 - rjurney