Apache spark pyspark中col()函数的用法

Apache spark pyspark中col()函数的用法,apache-spark,pyspark,Apache Spark,Pyspark,发行说明: 在下面的代码中,示例(1)工作正常,但(2)抛出错误。我检查了函数定义中的参数,包括initcap(col)和upper(col),我认为这意味着它们将接受一个Column对象,那么为什么执行过程中会有差异呢?添加col()upper()时不会出错 生成数据的代码: from pyspark.sql import Row from pyspark.sql.types import StructType , StructField , StringType from pyspark.

发行说明:

在下面的代码中,示例(1)工作正常,但(2)抛出错误。我检查了函数定义中的参数,包括initcap(col)和upper(col),我认为这意味着它们将接受一个Column对象,那么为什么执行过程中会有差异呢?添加col()upper()时不会出错

生成数据的代码:

from pyspark.sql import Row
from pyspark.sql.types import StructType , StructField , StringType 
from pyspark.sql.functions import col , upper , initcap
myRow = Row('this is spark')

myManualSchema = StructType([
StructField('Description',StringType())
])

myDF = spark.createDataFrame([myRow],myManualSchema)
myDF.show()
问题复制代码

myDF.select(initcap('Description')).show(2)     # (1) Works Fine

myDF.select(upper('Description')).show(2)       # (2) Error

myDF.select(upper(col('Description'))).show(2)  # (3) Works Fine 
(一)

(二)

(三)
这是
上(列)
下(列)
函数的预期行为。如果您浏览,您将看到
initcap(col)
函数的字符串到列的显式转换,但是没有为
upper(col)
lower(col)
函数编写Python包装器

def initcap(col):
“将每个单词的第一个字母翻译成句子中的大写字母。
>>>createDataFrame([('ab cd',)['a'])。选择(initcap(“a”)。别名('v'))。收集()
[行(v=u'Ab Cd')]
"""
sc=SparkContext.\u活动\u spark\u上下文
返回列(sc.\u jvm.functions.initcap(\u到\u java\u列(col)))

同样,如果您检查上述函数的底层,您将看到它们接受
列作为参数。

如果您检查Spark SQL函数文档,您可以看到上层函数接收一个col对象,而不是字符串:


感谢您在这里@Kondasamy提供的帮助。了解到有些函数有python包装器,而有些函数没有,这是很有见地的,这就是需要注意的地方。一个要点是直接查看源代码以更好地理解。再次感谢:)