我需要得到一个预期的Dataframe在aws胶水使用pyspark显示在最后
################# Initial Dataframe#################
+---+--------------------+-------------------+
|_c0| _c1| time|
+---+--------------------+-------------------+
| 1| null|2020-05-30 19:36:32|
| 2|Mobii5 |2020-05-30 19:36:32|
| 3|Nooft biHi ooFrame 2|2020-05-30 19:36:32|
| 4|Samsung mobile ...|2020-05-30 19:36:32|
| 5|Samsung ppjomes ...|2020-05-30 19:36:32|
| 6| samsung GTP G Tv ne|2020-05-30 19:36:32|
| 7| all mightyPanasoci |2020-05-30 19:36:32|
| 8|Samsung hola .|2020-05-30 19:36:32|
| 9|Mooron phoines Mondo|2020-05-30 19:36:32|
| 10|Samsung Guru .......|2020-05-30 19:36:32|
+---+--------------------+-------------------+
下面是我的代码
time_udf = udf(lambda x: year(x), IntegerType())
timestamp = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
new_df = df.withColumn('time',unix_timestamp(lit(timestamp),'yyyy-MM-dd HH:mm:ss').cast("timestamp"))
print(new_df.show(10))
time.sleep(30)
df1 = new_df.withColumn('Year',time_udf(col("time")))
df1.createOrReplaceTempView("people")
sqlDF = spark.sql("SELECT * FROM people")
sqlDF.show()
print(df1.printSchema())
return(df1)
需要使用aws-udf-pyspark获得如上所示的输出
############### Expected###################
+---+--------------------+-------------------+----+
|_c0| _c1| time|Year|
+---+--------------------+-------------------+----+
| 1| null|2020-05-29 20:07:58|2020|
| 2|Mobiistar Prime 5...|2020-05-29 20:07:58|2020|
| 3|NTT Hikari i-Frame 2|2020-05-29 20:07:58|2020|
| 4|Samsung SM-P605K ...|2020-05-29 20:07:58|2020|
| 5|Samsung SM-G850W ...|2020-05-29 20:07:58|2020|
| 6|samsung GTP G Tv ne |2020-05-29 20:07:58|2020|
| 7|all mightyPanasoci |2020-05-29 20:07:58|2020|
| 8|Samsung hola .|2020-05-29 20:07:58|2020|
| 9|Mooron phoines Mondo|2020-05-29 20:07:58|2020|
| 10|Samsung Guru .......|2020-05-29 20:07:58|2020|
+---+--------------------+-------------------+----+
我可以用下面这条线把它弄好
df1 = new_df.withColumn('Year',year(new_df.time))
但我需要使用自定义项作为要求
1条答案
按热度按时间vlju58qv1#
你不能使用
year
在udf内部,因为它是pyspark函数。如果真的需要使用自定义项,可以使用常用的python日期时间函数:
但是使用
year
,就像在.withColumn('Year',year(new_df.time))
会更简单,更快,所以如果它有效-最好坚持下去。