如何处理 pyspark 中的 SAFE_CAST sql 函数
How to tackle SAFE_CAST sql function in pyspark
我们有以下在大查询环境中运行的查询。
SELECT id,name, SAFE_CAST(value AS FLOAT64) as resultvalue from patienttable
where SAFE_CAST(value AS FLOAT64) > 0
我需要 运行 在 spark 环境中使用 python 进行查询。
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))
在 BigQuery 中,SAFE_CAST
用于防止转换错误。
在 Spark SQL 中,如果无法进行转换,cast
函数将 return null
。而Spark中没有SAFE
这个函数。
此外,您正在使用 Bigquery 特有的 FLOAT64
,您应该只使用 float
。试试这个:
df2 = spark.sql("SELECT id, name, CAST(value AS FLOAT) AS resultvalue FROM patienttable WHERE CAST(value AS FLOAT) > 0")
这应该有效
new_df = spark.sql("select id, name, cast(value as float) as resultvalue from patienttable WHERE value > 0")
如果您想在数据中使用特定的小数点,请使用 decimal(a, b)
而不是 float
。
我们有以下在大查询环境中运行的查询。
SELECT id,name, SAFE_CAST(value AS FLOAT64) as resultvalue from patienttable
where SAFE_CAST(value AS FLOAT64) > 0
我需要 运行 在 spark 环境中使用 python 进行查询。
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))
在 BigQuery 中,SAFE_CAST
用于防止转换错误。
在 Spark SQL 中,如果无法进行转换,cast
函数将 return null
。而Spark中没有SAFE
这个函数。
此外,您正在使用 Bigquery 特有的 FLOAT64
,您应该只使用 float
。试试这个:
df2 = spark.sql("SELECT id, name, CAST(value AS FLOAT) AS resultvalue FROM patienttable WHERE CAST(value AS FLOAT) > 0")
这应该有效
new_df = spark.sql("select id, name, cast(value as float) as resultvalue from patienttable WHERE value > 0")
如果您想在数据中使用特定的小数点,请使用 decimal(a, b)
而不是 float
。