从Spark DataSet中的单个列派生多个列,并在新列上使用Group By

时间:2018-09-20 17:57:27

标签: apache-spark apache-spark-sql rdd apache-spark-dataset

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

textfile1.txt

line1
line2
line3
line4

textfile2.txt

line1
line2
line3
line4

textfile3.txt

line1
line2
line3
line4

textfile4.txt

line1
line2
line3
line4

我的一个列值如下

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   |
---------------------------+  

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

2 个答案:

答案 0 :(得分:0)

您可以通过在数据帧上调用withColumn函数来执行此操作。您可以在列上使用正则表达式函数来获取它的特定部分。由于您要查找3个新列,因此您可以调用同一函数3次。 如果不需要原始列,则可以在最后调用放置函数。

答案 1 :(得分:0)

尝试以下

 {
        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
 }