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

时间:2016-10-06 13:30:29

标签: apache-spark pyspark typeerror pyspark-sql

我对Spark和Python很陌生,所以对于经验丰富的人来说,这可能是显而易见的。

我手动创建了一个列,并希望创建另一个列,其中所有值都是' s。我所采用的课程建议使用lit()函数。但是,我不能为我的生活弄清楚如何。此代码会出现此错误:" TypeError:' Column'对象不可调用"

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>

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

3 个答案:

答案 0 :(得分:3)

您也可以使用DataFrame方法selectconcat函数来完成此操作。

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

答案 1 :(得分:0)

尝试:

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

答案 2 :(得分:0)

尝试以下方法:

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')))