在pyspark过滤器函数中获取sql数据类型不匹配错误

问题描述 投票:0回答:1

我在代码 df1=df.filter((col('A')=='xf')) 中遇到以下错误 数据类型 ntext 和 varchar 在等于运算符中不兼容

pyspark azure-data-factory azure-databricks databricks-sql
1个回答
0
投票

正如史蒂文所说,你可以在 pyspark 中查询或过滤时进行转换。

我在 SQL Server 中过滤时遇到了同样的错误。

enter image description here

解决方案。

SELECT * 
FROM ExampleTable 
WHERE CAST(Description AS NVARCHAR(MAX)) = 'xf';

enter image description here

因此,您可以执行以下任一方式。

query = """
SELECT CAST(A AS NVARCHAR(MAX)) AS A, *
FROM your_table
"""
df = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:sqlserver://<server>:<port>;database=<database>") \
    .option("query", query) \
    .option("user", "<user>") \
    .option("password", "<password>") \
    .load()

使用上述查询后,您可以直接过滤它。

from pyspark.sql.functions import col

df1 = df.withColumn("A", col("A").cast("string"))
filtered_df = df1.filter(col("A") == "xf")

将其投射到 pyspark 转换中,然后对其进行过滤。

如果您不想要任何这些,那么您可以将数据库表中的架构更新为受支持的类型,即

nvarchar(max)
varchar(max)

© www.soinside.com 2019 - 2024. All rights reserved.