は、テストデータフレームを与える:pyspark変更日、このコードで何が間違っている
+---+--------------------+
| id| date|
+---+--------------------+
| a|2014-01-09 00:00:...|
| b|2014-01-27 00:00:...|
| c|2014-01-31 00:00:...|
+---+--------------------+
root
|-- id: string (nullable = true)
|-- date: timestamp (nullable = true)
それから私は、一日を変更するには、UDFを定義します日付列の:
:def change_day_(date, day):
return date.replace(day=day)
change_day = sf.udf(change_day_, sparktypes.TimestampType())
testdf.withColumn("PaidMonth", change_day(testdf.date, 1)).show(1)
これは、エラーを発生させます
testdf.withColumn("PaidMonth", change_day(testdf.date, sf.lit(1))).show()
代替答えは歓迎:ArthurTaccaさんのコメント@にの
Py4JError: An error occurred while calling z:org.apache.spark.sql.functions.col. Trace:
py4j.Py4JException: Method col([class java.lang.Integer]) 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)
おそらく 'from pyspark.sql.functions import lit'を実行した後、' lit(1) 'で' 1'( 'change_day'の呼び出しで)を置き換えてみてください。 –
ありがとう!それはうまくいった! – muon
@ArthurTacca理由を説明していただけますか? – muon