在两个数据框之间映射到新模式的数据框

时间:2019-12-15 23:31:44

标签: scala apache-spark apache-spark-sql

我正在尝试寻找一种有效且干净的方法来在其他两个DataFrame之间创建一个模式化的DataFrame。

DataFrame One(fNameDF):

+---------+
| fName   |
+---------+
| Paul    |
| Bob     |
| George  |
+---------+

DataFrame 2(lNameDF):

+---------+
| lName   |
+---------+
| Rimerman|
| King    |
| Reed    |
+---------+

结果:数据框三(combinedDF):

val combinedSchema: StructType = new StructType()
.add(StructField("fullName", StringType, nullable = true))
.add(StructField("phoneNumber", StringType, nullable = true))

+-----------------+--------------+
|     fullName    | phoneNumber  |
+-----------------+--------------+
| Paul Rimerman   |     null     |
| Paul King       |     null     |
| Paul Reed       |     null     |
| Bob Rimerman    |     null     |
| Bob King        |     null     |
| Bob Reed        |     null     |
| George Rimerman |     null     |
| George King     |     null     |
| George Reed     |     null     |
+-----------------+--------------+

我曾经尝试过-运气不好-使用嵌套映射操作来完成上述操作,但是感觉好像有更简单的方法可以做到吗?

val combinedDF = fNameDF.map(fNameRow => { lNameDF.map(lNameRow => 
{ val fullName = concat(fNameDF.getString(0),lit(" "), lNameDF.getString(0))})}).schema(combinedSchema)

1 个答案:

答案 0 :(得分:0)

您可以使用以下onEdit

full join

为进一步了解,您可以从scala> var df = Seq(("Rimerman"),("King"),("ReedReed"),("Mahesh")).toDF("lname").withColumn("id",lit(1)) scala> df.show() +--------+---+ | lname| id| +--------+---+ |Rimerman| 1| | King| 1| |ReedReed| 1| | Mahesh| 1| +--------+---+ 语句中删除drop子句

join

希望它对您有帮助。