我在hdfs中有一个csv文件:/hdfs/test.csv,我想使用spark&scala对下面的数据进行分组,我需要这样的输出。
我想根据A1列对A1 ... AN列进行分组,输出应该是这样的
所有行应按以下方式分组。 输出:
JACK , ABCD, ARRAY("0,1,0,1", "2,9,2,9")
JACK , LMN, ARRAY("0,1,0,3", "0,4,3,T")
JACK, HBC, ARRAY("1,T,5,21", "E7,4W,5,8)
输入:
++++++++++++++++++++++++++++++
name A1 A1 A2 A3..AN
--------------------------------
JACK ABCD 0 1 0 1
JACK LMN 0 1 0 3
JACK ABCD 2 9 2 9
JAC HBC 1 T 5 21
JACK LMN 0 4 3 T
JACK HBC E7 4W 5 8
我在spark scala中需要以下输出
JACK , ABCD, ARRAY("0,1,0,1", "2,9,2,9")
JACK , LMN, ARRAY("0,1,0,3", "0,4,3,T")
JACK, HBC, ARRAY("1,T,5,21", "E7,4W,5,8)
答案 0 :(得分:1)
您可以通过将列作为数组来实现。
first,second = str.split( middle )
如果您对重复项没问题,还可以使用collect_list而不是collect_set。
答案 1 :(得分:0)
您的输入有两个不同的列,称为A1
。我将假设groupBy
类别称为A
,而放置在该最终数组中的元素是A1
。
如果将数据加载到DataFrame中,则可以执行以下操作以实现指定的输出:
import org.apache.spark.sql.functions.{collect_set, concat_ws}
val grouped = someDF
.groupBy($"name", $"A")
.agg(collect_set(concat_ws(",", $"A1", $"A2", $"A3", $"A4")).alias("grouped"))