Python 如何更新spark数据框中的特定单元格值?

Python 如何更新spark数据框中的特定单元格值?,python,pyspark,apache-spark-sql,Python,Pyspark,Apache Spark Sql,我有两个数据帧。我需要从数据帧中找到一个值,并更新特定行的单元格 前 预期产出: (A, 10, A1), (b, 20, NaN), (c, 30, C1) 请向我发送解决方案的详细信息,因为我刚刚开始使用spark dataframe。您可以通过两个步骤实现此结果 首先,一个leftOuterJoin将为您提供一对RDD,其中包含(a,(10,A1)) 其次,使用一个简单的映射,您可以将这些对转换为预期的结果 您可以使用以下代码: val d1 = Array(("a", "10"),

我有两个数据帧。我需要从数据帧中找到一个值,并更新特定行的单元格

预期产出:

(A, 10, A1), (b, 20, NaN), (c, 30, C1)

请向我发送解决方案的详细信息,因为我刚刚开始使用spark dataframe。

您可以通过两个步骤实现此结果

  • 首先,一个
    leftOuterJoin
    将为您提供一对RDD,其中包含
    (a,(10,A1))
  • 其次,使用一个简单的
    映射
    ,您可以将这些对转换为预期的结果

您可以使用以下代码:

val d1 = Array(("a", "10"), ("b", "20"), ("c", "30"))
val rdd1= sc.parallelize(d1)
val df1 = rdd1.toDF("key","val")

val d2 = Array(("a", "A1"), ("c", "C1"))
val rdd2 = sc.parallelize(d2)
val df2 = rdd2.toDF("key","div")

val res = df1.join(df2,Seq("key"),"left_outer")
res.show()

Spark数据帧是不可变的,因此从技术上讲,您无法更新任何值。您需要做的是使用一些转换创建一个具有所需值的新数据帧。
val d1 = Array(("a", "10"), ("b", "20"), ("c", "30"))
val rdd1= sc.parallelize(d1)
val df1 = rdd1.toDF("key","val")

val d2 = Array(("a", "A1"), ("c", "C1"))
val rdd2 = sc.parallelize(d2)
val df2 = rdd2.toDF("key","div")

val res = df1.join(df2,Seq("key"),"left_outer")
res.show()