我在SCALA中有两个RDD并将它们转换为数据帧。
现在我有两个dataframes.One 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)
我想加入上述两项,并将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?
答案 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")
我认为这可能会成功!