Представьте, что у меня есть этот фрейм данных:
data = {'Script': ["create table table_name ( col_1 string , col_2 string , col_3 string ) row format serde 'org.apache.hadoop.hive.serde2.lazy.lazysimpleserde' with properties ( 'field.delim' ='\t' , 'serialization.format' ='\t' , 'serialization.null.format'='' ) stored as inputformat 'org.apache.hadoop.mapred.textinputformat' outputformat 'org.apache.hadoop.hive.ql.io.hiveignorekeytextoutputformat' location 'hdfs://nameservice1/table_name'tblproperties ( 'parquet.compress'='snappy' );"]}
df = pd.DataFrame(data)
По сути, содержимое столбца - это DDL:
create table table_name
(
col_1 string
, col_2 string
, col_3 string
)
row format serde 'org.apache.hadoop.hive.serde2.lazy.lazysimpleserde' with properties
(
'field.delim' ='\t'
, 'serialization.format' ='\t'
, 'serialization.null.format'=''
)
stored as inputformat 'org.apache.hadoop.mapred.textinputformat' outputformat 'org.apache.hadoop.hive.ql.io.hiveignorekeytextoutputformat' location 'hdfs://nameservice1/table_name'tblproperties
(
'parquet.compress'='snappy'
)
Что мне нужно сделать, это удалить все содержимое между кулак "(" и слово "местоположение". В основном мой ожидаемый результат следующий:
create table table_name
(
col_1 string
, col_2 string
, col_3 string
)
location 'hdfs://nameservice1/table_name'tblproperties
(
'parquet.compress'='snappy'
)
Для этого я пытаюсь использовать подход регулярных выражений:
df['DDL'] = df.Script.str.replace(r")", " } ").str.replace(r'<}^>location+>', "")
Однако результат не был желаемым:
create table table_name
(
col_1 string
, col_2 string
, col_3 string
}
row format serde 'org.apache.hadoop.hive.serde2.lazy.lazysimpleserde' with properties
(
'field.delim' ='\t'
, 'serialization.format' ='\t'
, 'serialization.null.format'='' } stored as inputformat 'org.apache.hadoop.mapred.textinputformat' outputformat 'org.apache.hadoop.hive.ql.io.hiveignorekeytextoutputformat' location 'hdfs://nameservice1/table_name'tblproperties ( 'parquet.compress'='snappy' }
;
Что я делаю неправильно? С моим подходом я пытаюсь извлечь между {и местоположением ...