我是Scala新手,目前正在研究Scala和Spark的数据集。基于下面的输入数据集,我尝试创建一个新的数据集(见下文)。在新的数据集中,我希望有一个包含Scala trait Seq[order_summary]
的新列。Scala trait存储从输入数据集中获取的对应的Name
、Ticket Number
和Seat Number
的数据。
我已经实现了input_dataset.groupyBy("Name")
来组织数据集,并尝试了df.withColumn("NewColumn", struct(df("a"), df("b")))
来将不同的列组合在一起。然而,我想使用Scala特性来代替,并且还坚持将名称与票号匹配。有人知道如何解决这个问题或为我指出正确的方向吗?
输入数据集:input_dataset
名称类型为字符串。票据编号类型为整数
+----+---------------+-------------+
|Name| Ticket Number | Seat Number |
+----+---------------+-------------+
|Adam| 123 | AB |
|Adam| 456 | AC |
|Adam| 789 | AD |
|Bob | 1234 | BA |
|Bob | 5678 | BB |
|Sam | 987 | CA |
|Sam | 654 | CB |
|Sam | 321 | CC |
|Sam | 876 | CD |
+----+---------------+-------------+
输出数据集
类型是String
。Purchase Order Summary
是一个trait
,Seq[order_summary]
+----+-----------------------------------------------------+
|Name| Purchase Order Summary |
+----+-----------------------------------------------------+
|Adam|((Adam,123,AB),(Adam,456,AC),(Adam,789,AD)) |
|Bob |((Bob,1234,BA),(Bob,5678,BB)) |
|Sam |((Sam,987,CA),(Sam,654,CB),(Sam,321,CC),(Sam,876,CD))|
+----+-----------------------------------------------------+
1条答案
按热度按时间zujrkrfu1#
我很确定Spark有一个map方法。
所以你只需要创建一个case类
并在DF的Map中示例化它,然后将它收集到列表中。
collectAsList应该从RDD中检索数据并将其转换为scala List[PurchaseOrderSummary]。