Мой вложенный JSON выглядит так, как показано ниже.
{
"dc_id": "dc-101",
"source": {
"sensor-igauge": {
"id": 10,
"ip": "68.28.91.22",
"description": "Sensor attached to the container ceilings",
"temp":35,
"c02_level": 1475,
"geo": {"lat":38.00, "long":97.00}
},
"sensor-ipad": {
"id": 13,
"ip": "67.185.72.1",
"description": "Sensor ipad attached to carbon cylinders",
"temp": 34,
"c02_level": 1370,
"geo": {"lat":47.41, "long":-122.00}
}}}
У меня также есть схема для приведенных выше данных.
schema = StructType([
StructField("dc_id", StringType(),True),
StructField("source",MapType(StringType(),StructType([
StructField("description",StringType(),True),
StructField("ip",StringType(),True),
StructField("id",StringType(),True),
StructField("temp",StringType(),True),
StructField("c02_level",StringType(),True),
StructField("geo",StructType([
StructField("lat",DoubleType(),True),
StructField("long",DoubleType(),True),
]),True)
])),True)])
Я хочу знать, как использовать эту схему в python для отображения данных. У меня был такой код.
dataDS = (scSpark.createDataFrame(
[({
"dc_id": "dc-101",
"source": {
"sensor-igauge": {
"id": 10,
"ip": "68.28.91.22",
"description": "Sensor attached to the container ceilings",
"temp":35,
"c02_level": 1475,
"geo": {"lat":38.00, "long":97.00}
},
"sensor-ipad": {
"id": 13,
"ip": "67.185.72.1",
"description": "Sensor ipad attached to carbon cylinders",
"temp": 34,
"c02_level": 1370,
"geo": {"lat":47.41, "long":-122.00}
}}})]))
dataDS.select("dc_id","source",explode(format("source")).alias("sensor_name","sensor_value"))\
.select("dc_id","source","sensor_name","sensor_value",explode("sensor_value")).show()
Обратите внимание, что вместо format () я раньше использовал parse (), но получил NameError: имя 'parser' не определено . Я также пытался запустить это, используя из импорта парсера *, но получал ту же ошибку.
Результат был примерно таким, что не так, как ожидалось.
ip, description и geo имеют значение null.
Любая идея, как я могу справиться с этим в pyspark или с помощью python, мне нужны все значения с вложенные значения для географического ключа. Данные типа String и Struct не поступают.