从 Spark DataSet 中的单个列和新列上的分组依据派生多个列

Derive multiple columns from a single column in Spark DataSet and Group By on the new Columns

我是 Spark 的初学者,我在数据集中有 Avro 记录,我正在获取使用这些记录创建的数据集。

DataDataset<Row> ds = spark.read().format("com.databricks.spark.avro)
.option("avroSchema,schema.toString().load(./*.avro);

我的一个列值看起来像

+--------------------------+
|           col1           |
| VCE_B_WSI_20180914_573   |
| WCE_C_RTI_20181223_324   |
---------------------------+  

我想将此列拆分为多个列,并希望根据这个新列进行分组,如下所示

+------------------+
|col1  |col2|col3  |
|   VCE|   B|   WSI|
|   WCE|   C|   RTI|
+------------------+

我真的很感激任何关于我应该如何去做的提示?我是否应该将数据集转换为 RDD 并应用这些转换,但我不确定是否可以在 RDD 中添加新列。

您可以通过对数据框调用 withColumn 函数来完成此操作。您可以在列上使用正则表达式函数来获取它的特定部分。由于您正在寻找 3 个新列,因此您可以调用相同的函数 3 次。 如果您不需要原始列,那么您可以在最后调用 drop 函数。

尝试以下方法

 {
        val d = ds.map(r => r.getString(0).split('_'))
             .withColumn("col1", col("value")(0))
             .withColumn("col2", col("value")(1))
             .withColumn("col3", col("value")(2))
             .drop(col("value")).show
 }