Я пытался выполнить пример преобразования строки JSON в фрейм данных в искре, следуя официальной документации здесь .
Следующий случай работает нормально:
jsonStrings = ['{"name":"Yin","address":{"city":"Columbus","state":true}}']
otherPeopleRDD = sc.parallelize(jsonStrings)
otherPeople = spark.read.json(otherPeopleRDD)
otherPeople.show()
====== OUTPUT =======
+----------------+----+
| address|name|
+----------------+----+
|[Columbus, true]| Yin|
+----------------+----+
root
|-- address: struct (nullable = true)
| |-- city: string (nullable = true)
| |-- state: boolean (nullable = true)
|-- name: string (nullable = true)
Но я получаю сообщение об ошибке при попытке передать логическое значение True (как применимо в python):
jsonStrings = ['{"name":"Yin","address":{"city":"Columbus","state":True}}']
otherPeopleRDD = sc.parallelize(jsonStrings)
otherPeople = spark.read.json(otherPeopleRDD)
otherPeople.show()
====== OUTPUT =======
+--------------------+
| _corrupt_record|
+--------------------+
|{"name":"Yin","ad...|
+--------------------+
root
|-- _corrupt_record: string (nullable = true)
Чтобы дать некоторый контекст. Я вызываю API REST для получения данных JSON, используя запросы библиотеку в Python. Затем я получаю строку json, вызывающую .json () в ответе. Это дает мне строку json, где логические значения пишутся с заглавной буквы, как в python. (Истина становится Истиной, ложь становится Ложью). Я думаю, что это желаемое поведение, но при передаче этого JSON для зажигания, он жалуется на формат строки JSON, как показано выше.
resp = requests.get(url, params=query_str, cookies=cookie_str)
jsonString = resp.json()
Я прочитал документацию и искал в Интернете, но не нашел ничего, что могло бы помочь. Может кто-нибудь, пожалуйста, помогите мне здесь!
ОБНОВЛЕНИЕ: я нашел одно возможное объяснение. Это может быть из-за кодирования и декодирования JSON, предлагаемых библиотекой json в python. Ссылка
Но это все еще не объясняет, почему pyspark не может определить кодировку Python JSON.