当前位置: 首页 > 知识库问答 >
问题:

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

颛孙嘉石
2023-03-14

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

我有两个数据帧:

  • 主数据框:见截图:1
  • 查找数据帧:参见屏幕截图3

我想:

  • 查找主数据框中“年龄”=-1的所有行

我对如何做这件事伤了脑筋。我唯一想到的是将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()

共有1个答案

凤自珍
2023-03-14
val df = dfMain.filter("age == -1").join(dfLookUp, Seq("title")).select(col("title"), col("avg"), ......)

如果要保留任何其他值,请在下一步中使用main DF使用left/right/outer join

完成教程:databricks培训

 类似资料:
  • 用其他dataframe的列值替换dataframe的一列中的nan值时出现问题。下面是一个测试示例: 我想用其他dataframe中的特定值替换列名中的Nan值(如果其中有一些Nan值,则不是其他列),例如此dataframe中的Name2值: 我想得到的是: 这是此示例的测试代码: 然后我尝试了这三种方法,但都不起作用——我的数据帧始终保持Nan值。 你能告诉我哪里出错了吗?

  • 我有一个关于熊猫以及正确索引和替换值的问题。 我有两个数据帧,df1和df2,具有相同的列(Col1、Col2、Col3和Col4)。 在df1中,我想用另一个值(比如100)替换与df2中其他列(Col1、Col2和Col3)的值匹配的行中Col4中的值。 生成的df1看起来像这样: 我试过这样的方法: 但是我得到了错误,我不确定这是否达到了我想要的。

  • 我有一个包含n列的数据帧,我想用空值替换所有这些列中的空字符串。 我试过用 和 他们两个都没有工作。 如有任何线索,我们将不胜感激。谢谢

  • 我有一个如下的CSV文件。 我想把这个转化成下面。 基本上,我想在输出数据帧中创建一个名为idx的新列,该列将填充与键=idx,value=“n”后面的行相同的值“n”。

  • 我正在尝试连接两个apache spark sql DataFrame,并将第一个数据帧的列值替换为另一个。如: 我需要执行左连接并将 DF1.col1 的值替换为 DF2.col3,其中 DF1.col1 = DF2.col1。我不知道该怎么做。此外,如上例所示,DF1 除了“col1”和“col2”之外还有更多列,我无法对所有列都应用 select。我正在尝试类似的东西, 但这似乎行不通。另外

  • 我有两个Pandas Dataframe和,其中是的一部分,我想创建一个Dataframe,其中包含中的code>。 以下是一个例子: 注: 我的DataFrame可能有多个列,但是必须仅在列上进行匹配。