2017-03-06 82 views
0

此功能:使用PySpark SQL函数

from pyspark.sql import functions as F 
lg = F.log(5.2) 

http://spark.apache.org/docs/latest/api/python/pyspark.sql.html

回报:

Py4JError: An error occurred while calling z:org.apache.spark.sql.functions.col. Trace: 
py4j.Py4JException: Method col([class java.lang.Double]) does not exist 
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) 
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:339) 
    at py4j.Gateway.invoke(Gateway.java:274) 
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 
    at py4j.commands.CallCommand.execute(CallCommand.java:79) 
    at py4j.GatewayConnection.run(GatewayConnection.java:214) 
    at java.lang.Thread.run(Thread.java:745) 

文档指向使用一个数据帧中的函数:

>>> df.select(log(10.0, df.age).alias('ten')).rdd.map(lambda l: str(l.ten)[:7]).collect() 
['0.30102', '0.69897'] 
>>> df.select(log(df.age).alias('e')).rdd.map(lambda l: str(l.e)[:7]).collect() 
['0.69314', '1.60943'] 

应该也有能力独立使用log函数的值吗?

回答

2

pyspark.sql中的函数应该用于数据帧列。这些函数期望列作为参数传递。因此它正在寻找一个带有你传递的名字的列对象(在这个例子中是5.2),因此就是错误。

对于将log应用于您应该使用的任何值math.log而不是