我正在使用Spark on Databricks。编程语言是Scala。
我有两个数据框:
我想:
我已经破坏了如何做到这一点。我想出的唯一一件事就是将数据帧存储为databricks中的表并使用SQL语句(sql.Context.Sql ...),这最终变得非常复杂。
我想知道是否有更有效的方法。
编辑:添加可重现的示例
import org.apache.spark.sql.functions._
val df = sc.parallelize(Seq(("Fred", 20, "Intern"), ("Linda", -1, "Manager"), ("Sean", 23, "Junior Employee"), ("Walter", 35, "Manager"), ("Kate", -1, "Junior Employee"), ("Kathrin", 37, "Manager"), ("Bob", 16, "Intern"), ("Lukas", 24, "Junionr Employee")))
.toDF("Name", "Age", "Title")
println("Data Frame DF")
df.show();
val avgAge = df.filter("Age!=-1").groupBy("Title").agg(avg("Age").alias("avg_age")).toDF()
println("Average Ages")
avgAge.show()
println("Missing Age")
val noAge = df.filter("Age==-1").toDF()
noAge.show()
解决方案感谢Karol Sudol
val imputedAges = df.filter("Age == -1").join(avgAge, Seq("Title")).select(col("Name"),col("avg_age"), col("Title") )
imputedAges.show()
val finalDF= imputedAges.union(df.filter("Age!=-1"))
println("FinalDF")
finalDF.show()
答案 0 :(得分:1)
val df = dfMain.filter("age == -1").join(dfLookUp, Seq("title")).select(col("title"), col("avg"), ......)
如果您想保留任何其他值,请在left/right/outer join
的下一步使用main DF
。
浏览教程:databricks training