#apache-spark #pyspark #apache-spark-sql
#apache-spark #pyspark #apache-spark-sql
Вопрос:
У меня возникла проблема с чтением JSON из кода Spark SQL в PYSPARK. Объект JSON имеет формат, как показано ниже. Существуют некоторые структурные типы \
данных, и когда я пытаюсь прочитать эти данные, я получаю исключение.
{ «SalesManager»:»{«Email»: «abc@xyz.com «}», «colb»: «некоторое значение» }
Я пытался добавить 'serialization.format' = '1','ignore.malformed.json' = 'true'
, но это не помогло.
Исключение:
обратный вызов (последний последний вызов): файл «», строка 1, в файле «/usr/lib/spark/python/pyspark/sql/dataframe.py «, строка 380, в show print(self._jdf.showString(n, 20, по вертикали)) Файл «/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py «, строка 1257, в файле вызовов «/usr/lib/spark/python/pyspark/sql/utils.py «, строка 63, в deco возвращает файл f(*a, **kw) «/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py «, строка 328, в get_return_value py4j.protocol.Py4JJavaError: произошла ошибка при вызове o365.showString. : org.apache.spark.SparkException: задание прервано из-за сбоя этапа: задание 0 на этапе 5.0 не удалось 4 раза, последний сбой: потерянная задача 0.3 на этапе 5.0 (TID 283, ip-10-0-1-92 .ec2.internal, исполнитель 119): java.lang.Исключение IllegalArgumentException: данные — это не JSONObject, а java.lang.Строка со значением {«Email»:»abc@xyz.com «} в org.openx.data.jsonserde.objectinspector.JsonStructObjectInspector.getStructFieldData(JsonStructObjectInspector.java:73)
Комментарии:
1. Похоже, что образец, которым вы поделились, находится не в правильном формате JSON. Я думаю, это должно быть похоже
{ "SalesManager":"{"Email":"abc@xyz.com"}", "colb":"somevalue" }
, а во-вторых, вы хотите игнорировать такие случаи (которые имеют дополнительный символ «) или хотите преобразовать их в правильный формат?2. извините, опечатка в моем вводе, правильный формат такой, как здесь — { «SalesManager»:»{«Email «: «abc@xyz.com «}», «colb»: «некоторое значение» } . Мне нужно игнорировать такие случаи
3. Хорошо, вы также можете отредактировать вопрос и изменить формат. Вы пробовали настройку
.option("mode", "DROPMALFORMED")
?4. Конечно, я изменю вопрос. Я не хочу использовать dropmalformed . Что я пытаюсь сделать, так это то, что я читаю из json и возвращаюсь к другому сегменту s3 как «json». Однако при записи он записывает некоторые поля с «», рассматривая его как StringType() . Либо я не хочу избегать записи с помощью «», ЛИБО читать json, содержащий «», и игнорировать специальные символы.
5. Хорошо, я вижу, в определении структуры, каков тип поля
SalesManager
? Я предполагаю, что вы определили его как String, хотя оно не должно определяться как String . Я думаю, вам следует определить вложенный тип для этого ключа (SalesManager
), который имеет только полеSalesManager
является JSONObject, а не String, и не будет добавлять символ «.