使用 lit() 在 Spark 中创建新列

Creating new column in Spark using lit()

我对 Spark 和 Python 还很陌生,所以对于更有经验的人来说这可能真的很明显。

我已经手动创建了一列,并且想要创建另一列,其中所有值都是 's'。我正在学习的课程建议使用 lit() 函数。但是,我无法为我的生活弄清楚如何。此代码给出此错误:"TypeError: 'Column' object is not callable"

wordsDF = sqlContext.createDataFrame([('cat',), ('elephant',), ('rat',), ('rat',), ('cat', )], ['word'])
wordsDF.show()
from pyspark.sql.functions import lit, concat
pluralDF = ([(wordsDF.word.lit(),'s',)], ['words', 's'])
pluralDF.show()

(我使用 show 函数来显示结果以确保我做对了。如果我只 运行 第 1 行和第 2 行,它会显示我的动物列表,但第 4 行和5 次失败。)

导师给出的提示代码是这样的(第4行):

pluralDF = wordsDF.<FILL IN>

非常感谢任何帮助。谢谢!

您也可以使用 DataFrame 的方法 selectconcat 函数。

pluralDF = wordsDF.select("*", concat(df['word'], lit('s')).alias("plural")) 

尝试:

pluralDF = wordsDF.withColumn("words", lit('s'))

尝试以下操作:

import pyspark.sql.functions as F

wordsDF = sqlContext.createDataFrame([('cat',), ('elephant',), ('rat',), ('rat',), ('cat', )], ['word']) \
            .withColumns('words', F.lit('s'))

如果要将 's' 添加到字符串末尾,请尝试:

import pyspark.sql.functions as F

wordsDF = sqlContext.createDataFrame([('cat',), ('elephant',), ('rat',), ('rat',), ('cat', )], ['word']) \
            .withColumns('words', F.lit('s')) \
            .withColumns('words', F.concat(F.col('_1'), F.col('words')))