在scala中匹配两个数据帧

时间:2016-06-29 10:30:24

标签: scala join apache-spark-sql

我在SCALA中有两个RDD并将它们转换为数据帧。 现在我有两个dataframes.One prodUniqueDF我有两列名为prodiduid,它有产品的主数据

scala> prodUniqueDF.printSchema
root
 |-- prodid: string (nullable = true)
 |-- uid: long (nullable = false)

其次,ratingsDF我的列名为prodidcustidratings

scala> ratingsDF.printSchema
root
|-- prodid: string (nullable = true)
|-- custid: string (nullable = true)
|-- ratings: integer (nullable = false)

我想加入上述两项,并将ratingsDF.prodid替换为prodUniqueDF.uid

中的ratingsDF

要做到这一点,我首先将它们注册为' tempTables'

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?

1 个答案:

答案 0 :(得分:1)

可以轻松实现DataFrame的连接, 格式为

 DataFrameA.join(DataFrameB)

默认情况下,它需要内部联接,但您也可以指定要执行的联接类型,并且它们具有APi的联接 您可以在此处查看更多信息。

http://spark.apache.org/docs/latest/api/scala/#org.apache.spark.sql.DataFrame

要替换现有列中的值,您可以从API

获取withColumn方法的帮助

这将是这样的:

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

我认为这可能会成功!

相关问题