我来自pandas背景,习惯于将CSV文件中的数据读入数据帧,然后使用简单命令将列名更改为有用的东西:
df.columns = new_column_name_list
Run Code Online (Sandbox Code Playgroud)
但是,在使用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)
Run Code Online (Sandbox Code Playgroud)
这基本上是定义变量两次并首先推断模式然后重命名列名,然后再次使用更新的模式加载数据帧.
像熊猫一样,有更好更有效的方法吗?
我的火花版是1.5.0
在这个数据框中,我找到了每个组的总工资。在 Oracle 中我会使用这段代码
select job_id,sum(salary) as "Total" from hr.employees group by job_id;
Run Code Online (Sandbox Code Playgroud)
在 Spark SQL 中尝试了相同的操作,我面临两个问题
empData.groupBy($"job_id").sum("salary").alias("Total").show()
Run Code Online (Sandbox Code Playgroud)
我无法使用$(我认为是 Scala SQL 语法)。遇到编译问题
empData.groupBy($"job_id").sum($"salary").alias("Total").show()
Run Code Online (Sandbox Code Playgroud)任何想法?