【发布时间】:2021-09-15 14:00:15
【问题描述】:
我正在处理一个需要编写区分大小写的连接条件的场景。为此,我发现有一个可以更改的 spark 配置属性 spark.sql.caseSensitive。但是,如果我将此属性设置为True 或False,对最终结果集没有影响。
在这两种方式中,我都没有从下面的示例PySpark 代码中获得language=java 的结果。任何人都可以帮助如何处理这种情况吗?
spark.conf.set("spark.sql.caseSensitive", False)
columns1 = ["language","users_count"]
data1 = [("Java", "20000"), ("Python", "100000"), ("Scala", "3000")]
columns2 = ["language","note"]
data2 = [("java", "JVM based"), ("Python", "Indentation is imp"), ("Scala", "Derived from Java")]
df1 = spark.createDataFrame(data1, columns1)
df2 = spark.createDataFrame(data2, columns2)
#df1.createOrReplaceTempView("df1")
#df2.createOrReplaceTempView("df2")
df = df1.join(df2, on="language", how="inner")
display(df)
【问题讨论】:
-
是什么阻止您向连接列添加一致的转换 -
df1.join(df2, F.lower(df1["language"]) == F.lower(df2["language"]), how="inner") -
提供的数据是样本数据。在实际场景中,有 123Abc 和 123aBc 之类的字母数字 id。在我的情况下,这些是不同的 ID。看起来这种区分大小写的连接默认情况下正在发生。但是,现在我正在寻找一个属性,我可以使用它来改变这种区分大小写。
标签: apache-spark pyspark databricks