Я пытаюсь получить информацию о расположении раздела Base Hive из результата describe formatted db.table
во фрейм данных.
Я использую Spark 1.6 и у меня есть таблица Hive External, которая разбита на столбец dw_date
, если я запускаю команду hive describe formatted db.table
, я могу видеть результат ниже
+-------------------------------+----------------------------------------------------------------+-----------------------+--+
| col_name | data_type | comment |
+-------------------------------+----------------------------------------------------------------+-----------------------+--+
| # col_name | data_type | comment |
| | NULL | NULL |
| id | string | |
| name | string | |
| | NULL | NULL |
| # Partition Information | NULL | NULL |
| # col_name | data_type | comment |
| | NULL | NULL |
| dw_date | string | |
| | NULL | NULL |
| # Detailed Table Information | NULL | NULL |
| Database: | stage | NULL |
| Owner: | hive | NULL |
| CreateTime: | Thu May 30 15:11:06 EDT 2019 | NULL |
| LastAccessTime: | UNKNOWN | NULL |
| Protect Mode: | None | NULL |
| Retention: | 0 | NULL |
| Location: | hdfs://devlocation1/share/myserver123/dev/stage/partition_chk | NULL |
| Table Type: | EXTERNAL_TABLE | NULL |
| Table Parameters: | NULL | NULL |
| | EXTERNAL | TRUE |
| | transient_lastDdlTime | 1559243466 |
| | NULL | NULL |
| # Storage Information | NULL | NULL |
| SerDe Library: | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe | NULL |
| InputFormat: | org.apache.hadoop.mapred.TextInputFormat | NULL |
| OutputFormat: | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat | NULL |
| Compressed: | No | NULL |
| Num Buckets: | -1 | NULL |
| Bucket Columns: | [] | NULL |
| Sort Columns: | [] | NULL |
| Storage Desc Params: | NULL | NULL |
| | field.delim | , |
| | line.delim | \n |
| | serialization.format | , |
+-------------------------------+----------------------------------------------------------------+-----------------------+--+
Теперь из этого результата все, что я хочу, - это сохранить базовое расположение разделов во фрейме данных или в rdd или даже в переменной (просто хочу как-то извлечь это).
Значение, которое я хочу получить из приведенного выше результата:
hdfs://devlocation1/share/myserver123/dev/stage/partition_chk
Я начал со следующего подхода:
- создать фрейм данных
- отфильтровать желаемое значение
- форматировать результат
df=sqlContext.sql("describe formatted stage.partition_chk")
df1=df.where(df[result].contains("Location:"))
Однако я не могу получить информацию о местоположении: информация сверху. Любые предложения о том, как мы можем это сделать?
Спасибо,
Sid