我来自熊猫背景,习惯于将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)
这基本上是两次定义变量,然后首先推断模式,然后重命名列名,然后使用更新后的模式再次加载数据框。
有没有像我们在大熊猫中那样做的更好,更有效的方法?
我的Spark版本是1.5.0
for
循环+ 做到了withColumnRenamed
,但您的reduce
选择非常好:)