由于 ApplyMapping 不区分大小写,如何确定我需要哪些列?
How to determine what are the columns I need since ApplyMapping is'nt case sensitive?
我正在用新的数据库模型更新 Pyspark 脚本,我遇到了一些问题 calling/updating 列,因为 PySpark 显然将所有列都大写,但是当我使用 ApplyMapping 时它不区分大小写但是当我加入(左)与另一个 table 它区分大小写,我最终得到多个名称相同的列,但其中一个是大写,另一个是小写,我想使用 SelectFields 函数。
我试过使用完全相同的列名(区分大小写),但结果总是一样。
我试过打印模式,但唯一的区别只是大小写。
testDF = testDF.join(test2DF, "COLUMN",how='left')
test3DF=test3DF.withColumn("column", test3DF['ATTRB'].substr(4,4))
fullDF= testDF.join(test3DF, (testDF['ID'] == test3DF['ID']) )
.....
applymappingTest = ApplyMapping.apply(frame = fullDF, mappings = [
('ID', 'string', 'identifier', 'string')
('column', 'string', 'myColumn', 'string')
('COLUMN', 'string', 'someother', 'string')
], transformation_ctx = "applymappingTest")
......
selectfieldsTest= SelectFields.apply(frame = applymappingTest, paths = [
"identifier",
"myColumn",
], transformation_ctx = "selectfieldsTest")
Expected result:
myColumn is the column with the name in lowercase.
Actual result:
myColumn is the column with the name in uppercase.
您可以在applymapping中设置caseSensitive选项。
def applyMapping( mappings : Seq[Product4[String, String, String, String]], caseSensitive : Boolean = true, transformationContext : String = "", callSite : CallSite = CallSite("Not provided", ""), stageThreshold : Long = 0, totalThreshold : Long = 0 ) : DynamicFrame
顺便说一句,如果我没记错的话,applyMapping 默认是区分大小写的。但是 spark SQL 默认不区分大小写。要在 spark SQL 中设置区分大小写,您可以使用:
spark_session.sql('set spark.sql.caseSensitive=true')
我正在用新的数据库模型更新 Pyspark 脚本,我遇到了一些问题 calling/updating 列,因为 PySpark 显然将所有列都大写,但是当我使用 ApplyMapping 时它不区分大小写但是当我加入(左)与另一个 table 它区分大小写,我最终得到多个名称相同的列,但其中一个是大写,另一个是小写,我想使用 SelectFields 函数。
我试过使用完全相同的列名(区分大小写),但结果总是一样。
我试过打印模式,但唯一的区别只是大小写。
testDF = testDF.join(test2DF, "COLUMN",how='left')
test3DF=test3DF.withColumn("column", test3DF['ATTRB'].substr(4,4))
fullDF= testDF.join(test3DF, (testDF['ID'] == test3DF['ID']) )
.....
applymappingTest = ApplyMapping.apply(frame = fullDF, mappings = [
('ID', 'string', 'identifier', 'string')
('column', 'string', 'myColumn', 'string')
('COLUMN', 'string', 'someother', 'string')
], transformation_ctx = "applymappingTest")
......
selectfieldsTest= SelectFields.apply(frame = applymappingTest, paths = [
"identifier",
"myColumn",
], transformation_ctx = "selectfieldsTest")
Expected result:
myColumn is the column with the name in lowercase.
Actual result:
myColumn is the column with the name in uppercase.
您可以在applymapping中设置caseSensitive选项。
def applyMapping( mappings : Seq[Product4[String, String, String, String]], caseSensitive : Boolean = true, transformationContext : String = "", callSite : CallSite = CallSite("Not provided", ""), stageThreshold : Long = 0, totalThreshold : Long = 0 ) : DynamicFrame
顺便说一句,如果我没记错的话,applyMapping 默认是区分大小写的。但是 spark SQL 默认不区分大小写。要在 spark SQL 中设置区分大小写,您可以使用:
spark_session.sql('set spark.sql.caseSensitive=true')