[HADOOP] 스파크 데이터 프레임 : 기둥 기반 피벗 및 그룹
HADOOP스파크 데이터 프레임 : 기둥 기반 피벗 및 그룹
ID, 앱 및 고객이 아래와 같이 데이터 프레임을 입력했습니다.
입력 데이터 프레임
+--------------------+-----+---------+
| id|app |customer |
+--------------------+-----+---------+
|id1 | fw| WM |
|id1 | fw| CS |
|id2 | fw| CS |
|id1 | fe| WM |
|id3 | bc| TR |
|id3 | bc| WM |
+--------------------+-----+---------+
예상 결과
피벗 및 집계 사용 - 앱 이름을 열 이름으로 만들고 집계 된 고객 이름을 데이터 프레임의 목록으로 지정
예상 데이터 프레임
+--------------------+----------+-------+----------+
| id| bc | fe| fw |
+--------------------+----------+-------+----------+
|id1 | 0 | WM| [WM,CS]|
|id2 | 0 | 0| [CS] |
|id3 | [TR,WM] | 0| 0 |
+--------------------+----------+-------+----------+
나는 무엇을 시도 했는가?
+--------------------+-----+-------+------+
| id|bc | fe| fw|
+--------------------+-----+-------+------+
|id1 | 0 | WM| WM|
|id2 | 0 | 0| CS|
|id3 | TR | 0| 0|
+--------------------+-----+-------+------+
문제 : 내 쿼리에서 'fw'아래에 'id1'에 대해 [WM, CS]와 같은 고객 목록을 가져올 수 없습니다 (예상 결과에 표시된 것과 같이). "WM"만 제공됩니다. 마찬가지로 "id3"의 경우 "TR"만 나타나고 대신 "id3"의 경우 "bc"아래에 [TR, WM] 값이있는 목록이 나타납니다
각 앱에서 고객 목록을 얻으려면 제안이 필요합니다.
해결법
-
==============================
1.셀이 0이어야하는 셀에서 빈 목록을 사용할 수있는 경우 collect_list를 사용할 수 있습니다.
셀이 0이어야하는 셀에서 빈 목록을 사용할 수있는 경우 collect_list를 사용할 수 있습니다.
df.groupBy("id").pivot("app").agg(collect_list("customer")).show +---+--------+----+--------+ | id| bc| fe| fw| +---+--------+----+--------+ |id3|[TR, WM]| []| []| |id1| []|[WM]|[CS, WM]| |id2| []| []| [CS]| +---+--------+----+--------+
-
==============================
2.CONCAT_WS를 사용하면 배열을 분해 할 수 있고 대괄호를 제거 할 수 있습니다.
CONCAT_WS를 사용하면 배열을 분해 할 수 있고 대괄호를 제거 할 수 있습니다.
df.groupBy("id").pivot("app").agg(concat_ws(",",collect_list("customer")))
from https://stackoverflow.com/questions/46228331/spark-dataframe-pivot-and-group-based-on-columns by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하이브 JDBC getConnection이 반환하지 않습니다. (0) | 2019.06.28 |
---|---|
[HADOOP] hadoop의 여러 매퍼 (0) | 2019.06.28 |
[HADOOP] 마스터 'yarn'으로 실행하는 경우 HADOOP_CONF_DIR 또는 YARN_CONF_DIR을 환경에 설정해야합니다. (0) | 2019.06.28 |
[HADOOP] Avro와 MR을 사용하지 않고 Java API를 사용하여 HDFS에 쪽모작 형식 작성 (0) | 2019.06.28 |
[HADOOP] Spark가있는 Hadoop의 HDFS (0) | 2019.06.28 |