【问题标题】:python parameter validation -pyspark dataframe filter stringpython参数验证-pyspark数据框过滤字符串
【发布时间】:2020-09-16 05:25:08
【问题描述】:

我需要将 where 子句字符串直接传递给输入数据框以过滤输入记录。 带有列名和要过滤的值的 filter_string 将采用以下格式:

Ex 1: "(col('clm1') == '201')"
Ex 2: "(col('clm1') == '101') & (col('dim2') == '201')"

Scenario: If filter_string = "(col('clm1') == '201')"   # In the correct format
   df_output = df_input.filter(eval(filter_str)

现在,如果不是上述格式,我想编写 python 语法来引发过滤器字符串的异常。我该怎么做?

【问题讨论】:

  • 您没有提供实际的 python 代码。如果“什么”不是上述格式?你有多个字符串,你在说哪一个?你能举几个filter_str的例子吗?我看到你使用 eval(),这通常是一个不好的迹象。
  • 您可以考虑Ex 1,并且必须编写一些代码来检查以上述格式传递的参数的语法,如果不是我必须引发异常。

标签: python dataframe filter pyspark pyspark-dataframes


【解决方案1】:

我正在尝试理解您所写的内容,但遇到了麻烦。一般来说,你不应该把“文本”和“代码”混在一起。它使试图阅读您作品的人感到困惑。 “Scenario:”和“Ex 1:”这两个词不是代码,不应出现在您的代码块中。

听起来您想根据匹配的字符串引发异常。以下是如何做到这一点:

filter_string = "(col('clm1') == '201')" # Could be something else too. 
check_string  = "(col('clm1') == '201')"

if not other_string == check_string:
    raise TypeError(f"The string you provided, {filter_string}, is not valid.")

df_output = df_input.filter(eval(filter_string))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2022-06-14
    • 2018-09-16
    • 2021-11-23
    相关资源
    最近更新 更多