Апачская свинья / твиттер слон-птица Json парсер ClassCastException
Я пытаюсь разобрать довольно простой файл json, используя Pig и библиотеку Twitter-слона, но это превращается в очень болезненный процесс отладки.
JSON имеет следующую структуру:
oid_id: (oid:chararray),
bookmarks: {(
oid_id:(oid:chararray),
id:chararray,
creator: chararray,
position:chararray,
creationdate:($ate:chararray)
)},
lastaction:(date:chararray),
settings:(preferredlanguage:chararray),
userid:chararray
Пример строки:
{ "Oid_id":{"OID":"573239f905474a686e2333f0"},"закладки":[{"ID":"LEGONINX106W0079264","создатель": "позиция" "игрок":96,"CreationDate":{"Дата ":"2016-12-26T09:37:36.916Z"},"oid_id":{" OID ":"5860e4e0ca6baf9032edc0d0"}},{" идентификатор позиция игрока "" "::"ONEPERCENTMW0128677","создатель"" ": 0,08," CreationDate ": {" дата ":"2018-12-18T15:42:33.956Z"},"oid_id":{" OID ":"5c191569faf8474953758930"}}],"lastaction":{" дата ":"2018-12-18T15:42:28.107Z"}," настройки ":{"preferredlanguage":" Vf","preferredvideoquality":"HD"}, "USERID":"ocs_32a6ad6dd242d5e3842f9211fd236723_1461773211"}
Вот мой код (вдохновленный этим руководством: https://acadgild.com/blog/determining-popular-hashtags-in-twitter-using-pig)
register /path/to/json-simple-1.1.1.jar
register /path/to/elephant-bird-core-4.17.jar
register /path/to/elephant-bird-pig-4.17.jar
register /path/to/elephant-bird-hadoop-compat-4.17.jar
define JsonLoaderEB com.twitter.elephantbird.pig.load.JsonLoader;
A = LOAD 'file.json' USING JsonLoaderEB('-nestedLoad=true') as myMap;
describe A;
input_table: {myMap: bytearray }
B = foreach A generate flatten(myMap#'bookmarks') as (bookmark:map[]);
describe B;
B: {закладка: карта [] }
Когда мы снимаем вышеприведенное отношение, мы видим, что все данные были успешно загружены.
([{ "Oid_id":{"OID":"5860e4e0ca6baf9032edc0d0"},"Создатель": "игрок", "CreationDate":{"Дата": "2016-12-26T09: 37: 36.916Z"}, "идентификатор ":" LEGONINX106W0079264", "положение":96},{"oid_id":{"OID":"5c191569faf8474953758930"},"создатель": "игрок", "CreationDate":{"дата": "2018-12- 18T15: 42: 33.956Z "}," идентификатор ":"ONEPERCENTMW0128677","положение":0.08}])
Теперь мы извлекаем дату создания, создателя, идентификатор и позицию из закладки.
C = foreach B generate bookmark#'creationdate' as date_fact, bookmark#'creator' as creator, bookmark#'id' as id, bookmark#'position' as position;
C: {date_fact: bytearray, создатель: bytearray, id: bytearray, позиция: bytearray }
Вывод таблицы дает следующую ошибку:
След Свинья
ОШИБКА 1066: Невозможно открыть итератор для псевдонима C. Ошибка бэкэнда: вершина не выполнена, vertexName=scope-41, vertexId=vertex_1542613138136_6721 88_2_00, диагностика =[задача не выполнена, taskId=task_1542613138136_672188_2_00_000000, информация о задаче: ошибка: информация: 0 = ошибка: диагностика: ошибка = 0 Ошибка во время выполнения задачи (ошибка): предпринять попытку_1542613138136_672188_2_00_000000_0:org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация при выполнении (имя: C: Store(hdfs:// песочница /tmp/temp-1543074195/t5 / 2 55 55 55 55 55 55 55 55 55) или т..apache.pig.impl.io.InterStorage) - sc ope-40 Ключ оператора: scope-40): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация при выполнении [POMapLookUp (Имя: POMapLookUp[bytearray] ] - ключ оператора scope-28: scope-28) children: null at [null[4,31]]]: java.lang.ClassCastException: java.lan g.String нельзя привести к java.util.Map в org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.processInput(PhysicalOperator.java:315) в org.apache.pig.backend.hadoop.executionengine.tez.plan.operator.POStoreTez.getNextTuple(POStoreTez.java:123) в org.apache.pig.backend.hadoop.executionengine.tez.runtime.PigProcessor.runPipeline (orgPro37)..apache.pig.backend.hadoop.executionengine.tez.runtime.PigProcessor.run (PigProcessor.java:241) в org.apache.tez.runtime.LogicalIOProcessorRuntimeTask.run(LogicalIOProcessorRuntimeTapg).runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:73) в org.apache.tez.runtime.task.TaskRunner2Callable$1.run(TaskRunner2Callable.java:61) для недобросовестной службы безопасности java. в javax.security.auth.Subject.doAs(Subject.java:422) в org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) в org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:61) в org.apache.tez.runtime.task.TaskRunner2Callable.callInternal(TaskRunner2Callable.java:37) в org.apache.tez.common.CallableWithNdc. вызов (CallableWithNdc.java:36) в java.util.concurrent.FutureTask.run(FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) в java.Ex. $Worker.run(ThreadPoolExecutor.java:624) в java.lang.Thread.run(Thread.java:748) Причина: org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация при выполнении [POMapLookUp (Имя: POMapLookUp[bytearray] - ключ оператора scope-28: scope-28) children: null at [null [4,31]]]: java.lang.ClassCastException: java.lang.String нельзя сопоставить с java. util.Map на org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:364) на org.apache.pig.backend.hadoop.executionengine.physicalLayer.reproOlanPach (.java: 406) at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.getNextTuple (POForEach.java:323) в org.apache.pig.backend.hadoop.executioneng ine.physicalLayer.PhysicalOperator.processInput (PhysicalOperator.java:305) 1,9Вверх
1 ответ
Даже если это дает хороший результат для table_extraction
отношение, это может быть из необработанных данных.
Можете ли вы удалить или исправить следующий объект, он выглядит недействительным:
"oid":"5c191393faf8475cb76ee0d5"