pyspark - 如何处理 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))
解决方案
在 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")
推荐阅读
- javascript - 错误:chart.min.js:13 未捕获(承诺中)错误:画布已在使用中。必须先销毁 ID 为“0”的图表,然后才能重新使用画布
- python - 使用解析器翻页如何实现?
- excel - 如何根据excel中的另一个单元格值限制单元格中的值输入/输入?
- javascript - Javascript:获取文本并切断
- django - 以编程方式将记录添加到数据库后,Django 更新索引
- python - 为什么当我使用 SQAlchemy 查询一些数据然后更改服务器中的路由时会使其变慢?
- sql - Postgres 相当于 ANY ... 在 n1ql 中满足结合 ANY 和 IN
- java - 为什么 RecordComponent 没有在 Java 17 的 Records 类中定义的注释信息?
- javascript - 阻止导入到 ES 模块中的 CommonJS 模块执行代码
- vue.js - 我在带有缓存加载器的 vue js 项目中的 firebase 有问题