case语句

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

我有下面的pyspark代码。在代码中,我将从另一个已转换为临时视图的Dataframe创建一个Dataframe。然后使用sql查询在最终查询中创建一个新字段。我试图创建的字段的代码最初来自postgresql,我想知道pysparksql中case语句和regex的正确版本是什么?

case when a.field2::varchar ~ '^[0-9]+$' then a.field2::varchar else '0' end

我是否将(field2)转换为字符串?
另外,什么是regex测试的正确pyspark sql版本?
代码:

from pyspark.sql.types import *
from pyspark.context import SparkContext
from pyspark.sql import Window
from pyspark.sql import SQLContext
from pyspark.sql.functions import col
from pyspark.sql.functions import first
from pyspark.sql.functions  import date_format
from pyspark.sql.functions import lit,StringType

from pyspark.sql.functions import date_trunc, udf,trim, upper, to_date, substring, length, min, when, format_number, dayofmonth, hour, dayofyear,  month, year, weekofyear, date_format, unix_timestamp
from pyspark import SparkConf
from pyspark.sql.functions import coalesce
from pyspark.sql import SparkSession
from pyspark.sql.functions import year, month, dayofmonth
from pyspark.sql.functions import UserDefinedFunction
import datetime
from pyspark.sql.functions import year
from pyspark.sql.functions import datediff,coalesce,lag
from pyspark.sql.functions import when, to_date
from pyspark.sql.functions import date_add
from pyspark.sql.functions import UserDefinedFunction

import traceback
import sys
import time
import math
import datetime

table_df.createOrReplaceTempView("table")

query="""select
case when a.field2::varchar ~ '^[0-9]+$' then a.field2::varchar else '0' end as field1

from table a"""

df=spark.sql(query)
omhiaaxx

omhiaaxx1#

您可以尝试:

query = """
    select
        case when a.field2 rlike '^[0-9]+$' 
             then a.field2
             else '0' 
             end as field1
    from table a
"""

df = spark.sql(query)

相关问题