На самом деле есть много способов достичь этого, один из них - поиграть с некоторыми базовыми c python данными, списком и l oop (извините за мой бедный Энгли sh)
Давайте играть ....
1-й вы должны получить все имена таблиц и с тем именем таблицы получить описание таблицы, которые содержат все имена столбцов с типом данных. мы используем 2 spark sql query
1: Table_name = spark.sql("SHOW TABLES FROM default")
(default
имя базы данных по умолчанию для базы данных)
результат
+--------+--------------+-----------+
|database| tableName|isTemporary|
+--------+--------------+-----------+
| default|convertedtable| false|
| default| delta_table| false|
| default| display| false|
| default| events| false|
| default| export_csv| false|
| default| flights| false|
| default| play_store| false|
+--------+--------------+-----------+
2: table_describe = spark.sql("DESCRIBE default.play_store")
результат
+--------------+---------+-------+
| col_name|data_type|comment|
+--------------+---------+-------+
| App| string| null|
| Category| string| null|
| Rating| string| null|
| Reviews| string| null|
| Size| string| null|
| Installs| string| null|
| Type| string| null|
| Price| string| null|
|Content Rating| string| null|
| Genres| string| null|
| Last Updated| string| null|
| Current Ver| string| null|
| Android Ver| string| null|
+--------------+---------+-------+
Теперь основная часть
Table_name = spark.sql("SHOW TABLES FROM default")
Table_name=Table_name.select('tableName').collect()
mvv_array = [(row.tableName) for row in Table_name]
cnt = 0
for idx,i in enumerate(mvv_array):
if cnt == 0:
tmp = spark.sql('DESCRIBE default.'+i).withColumn('table_name',lit(i))
temp_df = tmp
cnt = cnt + 1
else:
tmp = spark.sql('DESCRIBE default.'+i).withColumn('table_name',lit(i))
temp_df=temp_df.unionAll(tmp)
temp_df.show()
TADAAAA ... ..
+-----------------+---------+-------+--------------+
| col_name|data_type|comment| table_name|
+-----------------+---------+-------+--------------+
| Year| int| null|convertedtable|
| Month| int| null|convertedtable|
| DayofMonth| int| null|convertedtable|
| DayOfWeek| int| null|convertedtable|
| DepTime| string| null|convertedtable|
| CRSDepTime| int| null|convertedtable|
| ArrTime| string| null|convertedtable|
| CRSArrTime| int| null|convertedtable|
| UniqueCarrier| string| null|convertedtable|
| FlightNum| int| null|convertedtable|
| TailNum| string| null|convertedtable|
|ActualElapsedTime| string| null|convertedtable|
| CRSElapsedTime| string| null|convertedtable|
| AirTime| string| null|convertedtable|
| ArrDelay| string| null|convertedtable|
| DepDelay| string| null|convertedtable|
| Origin| string| null|convertedtable|
| Dest| string| null|convertedtable|
| Distance| int| null|convertedtable|
| TaxiIn| string| null|convertedtable|
+-----------------+---------+-------+--------------+
only showing top 20 rows
Возьмите все, что вам нужно, с нового фрейма данных.
Надеюсь, он выполнит то, что вы хотите.
Если вы найдете его как Ваше решение не забудьте пометить как Ответ и голосование.