在scala中匹配两个数据帧
我在SCALA中有两个RDD,并将它们转换为数据帧。 现在我有两个数据帧。一个是在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
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,请接受并投票!:)