我来自熊猫的背景和我习惯于阅读从CSV文件数据到数据帧,然后只需使用简单的命令更改列名到一些有用的东西:如何更改pyspark中的数据框列名?
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)
这基本上是用更新的架构定义变量两次,第一次推断架构,然后重命名列名,然后加载数据帧再次。
有没有更好更高效的方法来做到这一点,就像我们在熊猫做的一样?
我的火花的版本是1.5.0
我用'for'环+'withColumnRenamed'做到了,但你的'reduce'选项是非常好的:) –
@FelipeGerard那是一个非常糟糕的主意 –
好吧,因为在DF上调用一个动作之前没有任何东西在Spark中完成,它只是不那么优雅的代码......最终得到的DF完全相同! –