Spark SQL:null值在结果文件中转换为空字符串

时间:2017-10-03 10:57:16

标签: apache-spark pyspark apache-spark-sql aws-glue

我在AWS Glue中编写了一个脚本,用于从AWS S3读取CSV文件,对少数字段应用空检查,并将结果作为新文件存储回S3。问题是当它遇到String类型的字段时,如果值为null,它将转换为空字符串。但我不希望这种转变发生。对于所有其他数据类型,它工作正常。

这是迄今为止编写的脚本:

glueContext = GlueContext(SparkContext.getOrCreate())
spark = glueContext.spark_session

# s3 output directory
output_dir = "s3://aws-glue-scripts/..."

# Data Catalog: database and table name
db_name = "sampledb"
tbl_name = "mytable"

datasource = glueContext.create_dynamic_frame.from_catalog(database = db_name, table_name = tbl_name)

datasource_df = datasource.toDF()   
datasource_df.createOrReplaceTempView("myNewTable")
datasource_sql_df = spark.sql("SELECT * FROM myNewTable WHERE name IS NULL")
datasource_sql_df.show()

datasource_sql_dyf = DynamicFrame.fromDF(datasource_sql_df, glueContext, "datasource_sql_dyf")
glueContext.write_dynamic_frame.from_options(frame = datasource_sql_dyf, 
connection_type = "s3", connection_options = {"path": output_dir}, format = "json")

任何人都可以建议如何摆脱这个问题?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为目前不可能。 Spark配置为在编写JSON时忽略空值。在csv reader中,它显式地将null值设置为空。