2016-10-30 2 views
0

Я пишу код для замены символов следующим патерном: [^ \ w | ] с '' . Дело в том, что при использовании DataFrame «предложениеDF» внутри моей функции «removePunctuation» я получаю следующий «столбец» объекта «error».Поведение объекта «Столбец» внутри функции искры

from pyspark.sql.functions import regexp_replace, trim, col, lower 

    def removePunctuation(column): 
     cleanString = column 
     cleanString = cleanString.select(regexp_replace(sentenceDF['sentence'],'[^\w | ]','').alias('sentence')) 
     cleanString = cleanString.select(regexp_replace(cleanString['sentence'],'_','').alias('sentence')) 
     cleanString = cleanString.select(lower(cleanString['sentence'])) 

     return cleanString 



    sentenceDF = sqlContext.createDataFrame([('Hi, you!',), 
              (' No under_score!',), 
              (' *  Remove punctuation then spaces * ',)], ['sentence']) 

    result = sentenceDF.select(removePunctuation(col('sentence'))) 
    result.show() 

TraceBack:

TypeError: 'Column' object is not callable 
    --------------------------------------------------------------------------- TypeError Traceback (most recent call last) 
    <ipython-input-50-aa978fac8bae> in <module>() 
     15 (' * Remove punctuation then spaces * ',)], ['sentence']) 
     16 
    ---> 17 result = sentenceDF.select(removePunctuation(col('sentence'))) 

     18 result.show() 

    <ipython-input-50-aa978fac8bae> in removePunctuation(column) 
     4 def removePunctuation(column): 
     5 cleanString = column 
    ----> 6 cleanString = cleanString.select(regexp_replace(sentenceDF['sentence'],'[^\w | ]','').alias('sentence')) 
     7 cleanString = cleanString.select(regexp_replace(cleanString['sentence'],'_','').alias('sentence')) 
     8 cleanString = cleanString.select(lower(cleanString['sentence'])) TypeError: 'Column' object is not callable 

    Command took 0.09 seconds -- by [email protected] at 10/30/2016, 2:48:17 PM on My Cluster (6 GB) 
+0

Я думаю, что вы просто хотите РД и картографические работы, а не dataframe или выбрать заявления –

+0

Держу пари, это может быть сделано таким образом. Дело в том, что я не понимаю поведение моего dataFrame, когда передаю 'col (' предложение ')' моей функции. Если бы вы могли объяснить мне, почему я получаю объект «column» не вызываемый »и помогите мне исправить это, я был бы признателен. –

+0

Предоставление трассировки поможет –

ответ

1

Просто сделай это - Вы получаете ту же ошибку.

col('sentence').select() 

Рекомендация: Всегда пытайтесь написать код, прежде чем рефакторировать функции.

В любом случае, вот что вы хотите, я думаю.

def removePunctuation(df, column): 
    cleanString = df.select(trim(lower(col('sentence'))).alias('sentence')) 
    cleanString = cleanString.select(regexp_replace('sentence','[^\w]|\s+|_','').alias('sentence')) 

    return cleanString 

result = removePunctuation(sentenceDF, 'sentence') 
result.show() 

+--------------------+ 
|   sentence| 
+--------------------+ 
|    hiyou| 
|  nounderscore| 
|removepunctuation...| 
+--------------------+ 
+0

Спасибо, это было полезно. Я попробовал код, прежде чем реорганизовать его на функцию. На самом деле моя функция отлично работает, если я так называю «result = removePunctuation (sentenceDF)» –

+0

Хорошо, круто. Не стесняйтесь принимать ответ, если это поможет. –

+0

Благодарим вас за помощь! –