【问题标题】:Issue in case statement in pysparkpyspark中的case语句问题
【发布时间】:2020-05-13 11:11:39
【问题描述】:

我正在使用下面的代码来获取一个数据帧,但出现错误。如果将从代码中删除 case 语句,那么它将正常工作。

from pyspark.sql import functions as F
ivr_icm_cfs_lookup = spark.table("sample_table").where(F.col("tier") == "Servicing").select("fig","fig_bu","tier") .withColumn("fig",F.regexp_replace(F.col("fig"),"[^0-9a-zA-Z]",' ')).withColumn("fig_bu",F.when((F.col("fig_bu") == 'OPEN' & F.col("tier") == 'Academy', F.upper("tier")).otherwise(F.col("fig_bu"))))

【问题讨论】:

  • 错误:文件“/opt/mapr/spark/spark-2.3.2/python/pyspark/sql/column.py”,第 116 行,在 _ njc = getattr(self._jc, name )(jc) 文件“/opt/mapr/spark/spark-2.3.2/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,第 1257 行,在 call 文件“/opt/mapr/spark/spark-2.3.2/python/pyspark/sql/utils.py”,第 63 行,deco return f(*a, **kw) py4j.protocol.Py4JError: An调用 o113.and 时发生错误。 Trace: py4j.Py4JException: Method and([class java.lang.String]) 不存在

标签: python apache-spark pyspark


【解决方案1】:

先生,您的括号有问题。立即尝试

from pyspark.sql import functions as F
ivr_icm_cfs_lookup = spark.table("sample_table").where(F.col("tier") == "Servicing").select("fig","fig_bu","tier") .withColumn("fig",F.regexp_replace(F.col("fig"),"[^0-9a-zA-Z]",' ')).withColumn("fig_bu",F.when((F.col("fig_bu") == 'OPEN') & (F.col("tier") == 'Academy'), F.upper("tier")).otherwise(F.col("fig_bu")))

如果这真的不适合你,那么你可以通过将数据框注册为表然后在 sql 中编写你的案例来尝试 spark sql。

from pyspark.sql import functions as F
ivr_icm_cfs_lookup = spark.table("sample_table").where(F.col("tier") == "Servicing").select("fig","fig_bu","tier") .withColumn("fig",F.regexp_replace(F.col("fig"),"[^0-9a-zA-Z]",' '))

ivr_icm_cfs_lookup.createOrReplaceTempView('ivr_icm_cfs_lookup_table')
ivr_icm_cfs_lookup_df = spark.sql('''
select *, case when fig_bu='OPEN' and tier='Academy' then upper(tier) else fig_bu END as fig_bu_2 from ivr_icm_cfs_lookup_table
'''

这样你就可以添加所需的列了。

【讨论】:

  • 仍然出现错误:文件“/opt/mapr/spark/spark-2.3.2/python/pyspark/sql/functions.py”,第 42 行,在 _ jc = getattr(sc._jvm .functions, name)(col._jc if isinstance(col, Column) else col) 文件“/opt/mapr/spark/spark-2.3.2/python/lib/py4j-0.10.7-src.zip/py4j/ java_gateway.py”,第 1257 行,在 call 文件中“/opt/mapr/spark/spark-2.3.2/python/pyspark/sql/utils.py”,第 63 行,在 deco 中返回 f (*a, **kw) "/opt/mapr/spark/spark-2.3.2/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py" py4j.protocol.Py4JError: 一个错误调用 z:org.apache.spark.sql.functions.upper 时发生。追踪:
  • 有人可以帮我解决上述问题吗?
  • 请帮我解决这个问题?
  • 确切的错误是什么,它在我的系统中运行良好?
  • 附上上述错误。请提出其他方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
相关资源
最近更新 更多