私はmoocを取っています。pyspark.sqlのdata.frame理解機能
これは、列が小文字に変換する必要があるつの割り当てを有しています。 sentence=lower(column)
はそのトリックを行います。しかし、当初私は構文がsentence=column.lower()
であるべきだと思った。私はドキュメントを見て、私は構文の問題を理解できませんでした。オンライン文書と関数定義を検索することによって、私が間違った構文をしていることをどのように理解できたかを説明することは可能でしょうか?
This linkはそのstring.lower(示して、私は特別に混乱しています)は、通常の文字列のPythonオブジェクトの場合のトリック
from pyspark.sql.functions import regexp_replace, trim, col, lower
def removePunctuation(column):
"""Removes punctuation, changes to lower case, and strips leading and trailing spaces.
Note:
Only spaces, letters, and numbers should be retained. Other characters should should be
eliminated (e.g. it's becomes its). Leading and trailing spaces should be removed after
punctuation is removed.
Args:
column (Column): A Column containing a sentence.
Returns:
Column: A Column named 'sentence' with clean-up operations applied.
"""
sentence=lower(column)
return sentence
sentenceDF = sqlContext.createDataFrame([('Hi, you!',),
(' No under_score!',),
(' * Remove punctuation then spaces * ',)], ['sentence'])
sentenceDF.show(truncate=False)
(sentenceDF
.select(removePunctuation(col('sentence')))
.show(truncate=False))
私は列が異なっていることに同意します文字列よりもオブジェクトの型。しかし、どのようにすれば '' .lower() ''がそれと動作しないのか、 '' lower(column) ''になるはずです。ドキュメントdoesntは、実際の例を示すので、私は正しい構文を理解する方法を知っているだろう! – user2543622
さて、呼び出されたメソッドの "署名"を確認することができます。あなたは** removePunctuationへの呼び出しを確認した場合**この行で: '.select(removePunctuation(COL( '文')))'は 'removePunctuation'を呼び出す前に、それは' COL( '文')を呼び出していることがわかります'。 [col](https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.functions.col)のドキュメントで、** Columnを返すことができます**。また、このメソッドのコメントでは、removePunctuationは、文字列ではなくColumnとして引数として受け取られることを示しています。 –
私はここではっきりしないと思います。私は入力がcol形式であることを理解しています。しかし、col形式の場合、私は 'lower(col) 'を使う必要があり、' col.lower() 'を使うことができないことをどのように知っていますか? – user2543622