2017-10-03 13 views
0

J'ai écrit un script dans AWS Glue pour lire un fichier CSV à partir d'AWS S3, en appliquant une vérification nulle sur quelques champs et en stockant les résultats dans S3 comme nouveau fichier. Le problème est quand il rencontre un champ de type String si la valeur est nulle, il est converti en chaîne vide. Mais je ne veux pas que cette conversion se produise. Pour tous les autres types de données, cela fonctionne correctement.Spark SQL: les valeurs null sont converties en chaîne vide dans le fichier de résultats

est le script ici qui est écrit jusqu'à présent:

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") 

Quelqu'un peut-il s'il vous plaît suggérer comment se débarrasser de ce problème?

Merci.

Répondre

1

Je pense que ce n'est pas possible actuellement. Spark est configuré pour ignorer les valeurs nulles lors de l'écriture de JSON. Dans le lecteur csv, il met explicitement les valeurs nulles comme vides.