2017-03-06 5 views
0

Diese Funktion:Mit PySpark SQL-Funktionen

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

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

kehrt:

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) 

Die Dokumentation zeigt auf mit der Funktion in einem Datenrahmen:

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

Sollte auch log Funktion unabhängig auf einen Wert verwendet werden?

Antwort

2

Die Funktionen in pyspark.sql sollten für Datenrahmenspalten verwendet werden. Diese Funktionen erwarten, dass eine Spalte als Parameter übergeben wird. Daher sucht es nach einem Spaltenobjekt mit dem Namen, den Sie übergeben (in diesem Fall 5,2) und daher den Fehler.

Für log auf einem beliebigen Wert der Anwendung sollten Sie math.log verwenden stattdessen