从 Spark DataSet 中的单个列派生多个列并在新列上分组 [重复]
Posted
技术标签:
【中文标题】从 Spark DataSet 中的单个列派生多个列并在新列上分组 [重复]【英文标题】:Derive multiple columns from a single column in Spark DataSet and Group By on the new Columns [duplicate] 【发布时间】:2018-09-20 17:57:27 【问题描述】:我是 Spark 的初学者,我在数据集中有 Avro 记录,我正在使用这些记录创建 DataSet。
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 中添加新列。
【问题讨论】:
【参考方案1】:试试下面的
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
【讨论】:
【参考方案2】:您可以通过在数据框上调用 withColumn 函数来完成此操作。您可以在列上使用正则表达式函数来获取它的特定部分。由于您正在寻找 3 个新列,因此您可以调用相同的函数 3 次。 如果您不需要原始列,则可以在末尾调用 drop 函数。
【讨论】:
以上是关于从 Spark DataSet 中的单个列派生多个列并在新列上分组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Spark 2.0 中的 DataFrame 列创建数据集?