나는이 MAP
TXT 파일의 데이터를 :
[age#27,height#5.8]
[age#25,height#5.3]
[age#27,height#5.10]
[age#25,height#5.1]
연령대 별 평균 키를 표시하고 싶습니다.
다음은 LAOD
진술입니다.
records = LOAD '~/Documents/Pig_Map.txt' AS (details:map[]);
records: {details: map[]}
그런 다음 나이를 기준으로 데이터를 그룹화했습니다.
group_data = GROUP records BY details#'age';
group_data: {group: bytearray,records: {(details: map[])}}
에 액세스하기 위해 details
다음 FLATTEN
과 같이했습니다 (이 단계가 필요한지 확실하지 않음).
flatten_records = FOREACH group_data GENERATE group,FLATTEN(records);
flatten_records: {group: bytearray,records::details: map[]}
DUMP flatten_records
이것은 나에게 아래 출력을 제공합니다.
(25,[height#5.1,age#25])
(25,[height#5.3,age#25])
(27,[height#5.10,age#27])
(27,[height#5.8,age#27])
이제 평균 높이를 얻고 싶습니다. 나는 이것을 시도했다 :
display_records = FOREACH flatten_records GENERATE group,AVG(records.details#'height');
오류는 다음과 같습니다.
<line 10, column 57> Multiple matching functions for org.apache.pig.builtin.AVG with input schema: ({{(bytearray)}}, {{(double)}}). Please use an explicit cast.
조언 부탁드립니다.
이것을 시도해 볼 수 있습니까?
records = LOAD '~/Documents/Pig_Map.txt' AS (details:map[]);
records1 = FOREACH records GENERATE details#'age' AS age,details#'height' AS height;
group_data = GROUP records1 BY age;
display_records = FOREACH group_data GENERATE group,AVG(records1.height);
dump display_records;
산출:
(25,5.199999999999999)
(27,5.449999999999999)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다