2016-04-28 2 views
0

У меня есть pyspark.sql.DataFrame с некоторыми строками, если я пытаюсь взять некоторые из них я могу видеть населена, как и ожидалось, например:Спарк функция sql.DataFrame фильтр не работает, как ожидалось

train_df.take(20)

возвращение мне:

[Row(entityId=u'7179b9467f825a5bbb748ea6226b12137e23a19f', event=u'preferences-tags', targetEntityId=u'angriff'), 
Row(entityId=u'7179b9467f825a5bbb748ea6226b12137e23a19f', event=u'preferences-tags', targetEntityId=u'schiff'), 
Row(entityId=u'7179b9467f825a5bbb748ea6226b12137e23a19f', event=u'preferences-communityId', targetEntityId=u', ... ] 

И я хочу, чтобы фильтровать их по одному из полей, например, где event = preferences-tags, используя функцию фильтра, как показано ниже:

PRIMARY_EVENT_NAME = 'preferences-tags' 
rating = train_df.filter("event = '%s'" % (PRIMARY_EVENT_NAME)) 

Но, кажется, оно не фильтровать их должным образом, как возвращение 0 Полученные результаты

rating.count() 
# 0 is returned 

Я использовал функцию фильтра с таким же синтаксисом и логикой в ​​других частях моего кода, и он выполняет так же, как и ожидалось, что случилось Вот?

+0

'filter' принимает функцию, так что я не понимаю, почему вы думаете, что строка будет делать что-нибудь –

+0

train_df является pyspark.sql.DataFrame и фильтр принимает строку выражения SQL в качестве параметра – Mattia

+0

Ах, Я вижу, что ты сейчас спрашиваешь. Если вы используете строки, вы попробовали 'LIKE' или' == 'вместо' = '? –

ответ

0

Попробуйте использовать сравнение строк pythonic вместо SQL для вашего DataFrame.

rating = train_df.filter(train_df.event == PRIMARY_EVENT_NAME)) 
Смежные вопросы