Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark-Scala-用另一个数据帧的查找值替换数据帧中的值_Scala_Apache Spark - Fatal编程技术网

Spark-Scala-用另一个数据帧的查找值替换数据帧中的值

Spark-Scala-用另一个数据帧的查找值替换数据帧中的值,scala,apache-spark,Scala,Apache Spark,我和Spark一起在Databricks上工作。编程语言是Scala 我有两个数据帧: 主数据框:请参见屏幕截图: 查找数据帧:请参见屏幕截图 我想: 查找主数据框中“年龄”=-1的所有行 查看该行的“title”值 在dataframe 2中查看具有此头衔的人的平均年龄是多少 使用此值更新主数据框中的年龄 我对如何做这件事伤了脑筋。我唯一想到的是将dataframe存储为DataRicks中的一个表,并使用SQL语句(SQL.Context.SQL…),结果非常复杂 我想知道是否有更有

我和Spark一起在Databricks上工作。编程语言是Scala

我有两个数据帧:

  • 主数据框:请参见屏幕截图:
  • 查找数据帧:请参见屏幕截图
我想:

  • 查找主数据框中“年龄”=-1的所有行
  • 查看该行的“title”值
  • 在dataframe 2中查看具有此头衔的人的平均年龄是多少
  • 使用此值更新主数据框中的年龄
我对如何做这件事伤了脑筋。我唯一想到的是将dataframe存储为DataRicks中的一个表,并使用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()
如果要保留任何其他值,请在下一步中使用
main DF
使用
left/right/outer join


浏览教程:

请分享一个可复制的示例。我将使用一个不完全混乱的示例。我会尽快更新的。谢谢!这起作用了(参见我对原始问题的更新)。“年龄”一栏现在的标题是“平均年龄”,但它仍然保留着存在年龄的原始年龄。另外,感谢您提供视频链接。非常有用。
val df = dfMain.filter("age == -1").join(dfLookUp, Seq("title")).select(col("title"), col("avg"), ......)