在scala中匹配两个数据帧

在scala中匹配两个数据帧,scala,join,apache-spark-sql,Scala,Join,Apache Spark Sql,我在SCALA中有两个RDD,并将它们转换为数据帧。 现在我有两个数据帧。一个是prodUniqueDF,其中我有两列,分别名为prodid和uid,它有产品的主数据 scala> prodUniqueDF.printSchema root |-- prodid: string (nullable = true) |-- uid: long (nullable = false) 其次,ratingsDF,其中我的列名为prodid,custid,ratings scala> r

我在SCALA中有两个RDD,并将它们转换为数据帧。 现在我有两个数据帧。一个是
prodUniqueDF
,其中我有两列,分别名为
prodid
uid
,它有产品的主数据

scala> prodUniqueDF.printSchema
root
 |-- prodid: string (nullable = true)
 |-- uid: long (nullable = false)
其次,
ratingsDF
,其中我的列名为
prodid
custid
ratings

scala> ratingsDF.printSchema
root
|-- prodid: string (nullable = true)
|-- custid: string (nullable = true)
|-- ratings: integer (nullable = false)
我想加入以上两个,并在
评级SDF
中用
prodUniqueDF.uid
替换
评级SDF.prodid

为此,我首先将它们注册为“诱惑者”

prodUniqueDF.registerTempTable("prodUniqueDF")
ratingsDF.registerTempTable("ratingsDF")
我运行代码

val testSql = sql("SELECT prodUniqueDF.uid, ratingsDF.custid, ratingsDF.ratings FROM prodUniqueDF, ratingsDF WHERE prodUniqueDF.prodid = ratingsDF.prodid")
但错误在于:

org.apache.spark.sql.AnalysisException: Table not found: prodUniqueDF; line 1 pos 66

请帮忙!我如何才能实现加入?是否有其他方法来映射RDD?

数据帧的连接可以很容易地实现, 格式是

 DataFrameA.join(DataFrameB)
默认情况下,它需要一个内部联接,但您也可以指定要执行的联接类型,并且它们具有用于该联接的APi 你可以在这里查看更多信息

要替换现有列中的值,可以借助API中的withColumn方法

应该是这样的:

 val newDF = dfA.withColumn("newColumnName", dfB("columnName"))).drop("columnName").withColumnRenamed("newColumnName", "columnName")

我想这可能会奏效

我的数据帧知识不是很好,但是数据帧上有一个连接方法可以帮助我吗?谢谢@Shivansh。我已经尝试了加入RDD(不确定
join
是否能在DF中正常工作)。但问题似乎是用新值替换现有列。任何详细的示例都会非常有用!我已经更新了答案,请看一看。我希望你已经找到所有你需要的帮助!如果它解决了您的答案@suvojyotic,请接受并投票!:)