在pysparkDataframe中添加新列

fruv7luv  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(390)

我正在尝试向我的pysaprkDataframe添加一个新的记录时区

  1. from timezonefinder import TimezoneFinder
  2. tf = TimezoneFinder()
  3. df = df.withColumn("longitude",col("longitude").cast("float"))
  4. df = df.withColumn("Latitude",col("Latitude").cast("float"))
  5. df = df.withColumn("timezone",tf.timezone_at(lng=col("longitude"), lat=col("Latitude")))

我的错误率正在下降。

  1. ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

timezonefinder库用于通过传递地理坐标来查找时区。

  1. Latitude, longitude = 20.5061, 50.358
  2. tf.timezone_at(lng=longitude, lat=Latitude)
  3. -- 'Asia/Riyadh'
dzhpxtsq

dzhpxtsq1#

需要使用udf将列传递给python函数:

  1. import pyspark.sql.functions as F
  2. @F.udf('string')
  3. def tfUDF(lng, lat):
  4. from timezonefinder import TimezoneFinder
  5. tf = TimezoneFinder()
  6. return tf.timezone_at(lng=lng, lat=lat)
  7. df = df.withColumn("longitude", F.col("longitude").cast("float"))
  8. df = df.withColumn("Latitude", F.col("Latitude").cast("float"))
  9. df = df.withColumn("timezone", tfUDF(F.col("longitude"), F.col("Latitude")))
  10. df.show()
  11. +--------+---------+-----------+
  12. |Latitude|longitude| timezone|
  13. +--------+---------+-----------+
  14. | 20.5061| 50.358|Asia/Riyadh|
  15. +--------+---------+-----------+
展开查看全部

相关问题