Мне нужно перебрать json-файл, сгладить результаты и добавить столбец данных в каждый цикл с соответствующими значениями.Но конечный результат будет иметь около 2000 столбцов.Таким образом, использование withColumn для добавления столбцов является чрезвычайно медленным.Есть ли другая альтернатива для добавления столбцов в фрейм данных?
Пример ввода json:
[
{
"ID": "12345",
"Timestamp": "20140101",
"Usefulness": "Yes",
"Code": [
{
"event1": "A",
"result": "1"
}
]
},
{
"ID": "1A35B",
"Timestamp": "20140102",
"Usefulness": "No",
"Code": [
{
"event1": "B",
"result": "1"
}
]
}
]
Мой вывод должен быть:
ID Timestamp Usefulness Code_event1 Code_result
12345 20140101 Yes A 1
1A35B 20140102 No B 1
Файл json Яработа огромна и состоит из множества столбцов.Итак, withColumn в моем случае неосуществимо.
РЕДАКТИРОВАТЬ:
Пример кода:
# Data file
df_data = spark.read.json(file_path)
# Schema file
with open(schemapath) as fh:
jsonschema = json.load(fh,object_pairs_hook=OrderedDict)
Я перебираю файл схемы и в цикле, к которому я обращаюсьданные для конкретного ключа из данных DF (df_data).Я делаю это потому, что в моем файле данных есть несколько записей, поэтому я не могу перебрать файл json данных, или он будет перебирать каждую запись.
def func_structs(json_file):
for index,(k,v) in enumerate(json_file.items()):
if isinstance(v, dict):
srccol = k
func_structs(v)
elif isinstance(v, list):
srccol = k
func_lists(v) # Separate function to loop through list elements to find nested elements
else:
try:
df_data = df_data.withColumn(srcColName,df_Data[srcCol])
except:
df_data = df_data.withColumn(srcColName,lit(None).cast(StringType()))
func_structs(jsonschema)
Я добавляю столбцы в сам DF данных (df_data).