我正在Spark上使用Databricks。編程語言是Scala。Spark - Scala - 用另一個數據幀中的查找值替換數據幀中的值
我有兩個數據幀:
我想:
- 查找主數據框中「年齡」== - 1的所有行
- 看看該行
- 看在數據幀2的「稱號」的價值,看看哪些人有這個稱號的平均年齡爲
- 更新的年齡與此價值的主要數據幀。
我已經破壞了我的頭如何做到這一點。我想出的唯一方法是將數據框作爲表存儲在數據框中,並使用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()
解決方案感謝卡羅爾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()
請分享一個可重複的例子。 – mtoto
我會研究一個不是一團糟的例子。我一擁有它,Wil就會更新。 – Laura