【发布时间】:2020-01-20 14:33:51
【问题描述】:
我有一个如下的数据框:
+---------------+--------------------+
|IndexedArtistID| recommendations|
+---------------+--------------------+
| 1580|[[919, 0.00249262...|
| 4900|[[41749, 7.143963...|
| 5300|[[0, 2.0147272E-4...|
| 6620|[[208780, 9.81092...|
+---------------+--------------------+
我想拆分推荐列,以便有如下数据框:
+---------------+--------------------+
|IndexedArtistID| recommendations|
+---------------+--------------------+
| 1580|919 |
| 1580|0.00249262 |
| 4900|41749 |
| 4900|7.143963 |
| 5300|0 |
| 5300|2.0147272E-4 |
| 6620|208780 |
| 6620|9.81092 |
+---------------+--------------------+
所以基本上,我想将特征向量拆分为列,然后将这些列合并为一列。合并部分在:How to split single row into multiple rows in Spark DataFrame using Java 中描述。 现在,如何使用java进行拆分部分? 对于 scala,在此处进行了解释:Spark Scala: How to convert Dataframe[vector] to DataFrame[f1:Double, ..., fn: Double)],但我无法找到在 java 中按照链接中给出的相同方式进行操作的方法。
数据框的架构如下,IndexedUserID 的值将被纳入新创建的推荐列:
root
|-- IndexedArtistID: integer (nullable = false)
|-- recommendations: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- IndexedUserID: integer (nullable = true)
| | |-- rating: float (nullable = true)
【问题讨论】:
-
我提供了scala代码,没有使用explode函数。您可以用 Java 编写与我的示例类似的拆分部分。我没有太多使用 Java,所以认为这会有所帮助。请看看它是否适合你。
标签: java apache-spark apache-spark-sql