PySpark: поиск подстрок в текстовом и подмножестве данных - PullRequest
0 голосов
/ 18 мая 2018

Я новичок в pyspark и хочу перевести мой существующий код pandas / python на PySpark.

Я хочу установить подмножество моего dataframe, чтобы возвращались только строки, содержащие конкретные ключевые слова, которые я ищу в поле 'original_problem'.

Ниже приведен код Python, который я пробовал в PySpark:

def pilot_discrep(input_file):

    df = input_file 

    searchfor = ['cat', 'dog', 'frog', 'fleece']

    df = df[df['original_problem'].str.contains('|'.join(searchfor))]

    return df 

Когда я пытаюсь выполнить вышеуказанное, я получаю следующую ошибку:

AnalysisException:u "Невозможно извлечь значение из original_problem # 207: нужен тип структуры, но есть строка;"

1 Ответ

0 голосов
/ 18 мая 2018

В pyspark, попробуйте это:

df = df[df['original_problem'].rlike('|'.join(searchfor))]

Или эквивалентно:

import pyspark.sql.functions as F
df.where(F.col('original_problem').rlike('|'.join(searchfor)))

В качестве альтернативы, вы можете перейти на udf:

import pyspark.sql.functions as F

searchfor = ['cat', 'dog', 'frog', 'fleece']
check_udf = F.udf(lambda x: x if x in searchfor else 'Not_present')

df = df.withColumn('check_presence', check_udf(F.col('original_problem')))
df = df.filter(df.check_presence != 'Not_present').drop('check_presence')

Нометоды DataFrame предпочтительнее, потому что они будут быстрее.

...