首页 > 解决方案 > 如何处理 pyspark 中的 SAFE_CAST sql 函数

问题描述

我们有以下查询,它在大查询环境中工作。

SELECT id,name, SAFE_CAST(value AS FLOAT64) as resultvalue from patienttable 
where  SAFE_CAST(value AS FLOAT64) > 0

我需要使用 python 在 spark 环境中运行该查询。

from pyspark.sql import SparkSession
df = spark.read.parquet(path)
df.createOrReplaceTempView("people")

df2=spark.sql("""SELECT id,name, SAFE_CAST(value AS FLOAT64) as resultvalue from patienttable 
where  SAFE_CAST(value AS FLOAT64) > 0""")

因为我们在 pyspark sql 中放置了用于大查询的相同查询,所以我们得到以下错误:

ERROR:root:An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line string', (1, 0))

标签: pysparkgoogle-bigquerypyspark-sqlpyspark-dataframes

解决方案


在 BigQuery 中,SAFE_CAST用于防止投射错误。在 Spark SQL 中,如果无法转换,cast函数将返回。null而Spark中没有这样的功能SAFE

此外,您使用FLOAT64的也是 Bigquery 特有的,您应该只使用float. 尝试这个:

df2 = spark.sql("SELECT id, name, CAST(value AS FLOAT) AS resultvalue FROM patienttable WHERE CAST(value AS FLOAT) > 0")

推荐阅读