Принудительная схема с использованием искровой записи - PullRequest
1 голос
/ 22 января 2020

У меня есть зашифрованные данные в формате avro, имеющие следующую схему

{"type":"record","name":"ProtectionWrapper","namespace":"com.security","fields": 
[{"name":"protectionInfo","type":["null",{"type":"record","name":"ProtectionInfo","fields": 
[{"name":"unprotected","type":"boolean"}]}]}],
"writerSchema":"{"type":"record","name":"Demo","namespace":"com.demo","fields": 
[{"name":"id","type":"string"}]}"}

Здесь "writerSchema" - это схема данных до шифрования. Данные должны быть записаны с использованием схемы записи, чтобы функция расшифровки использовала их при расшифровке. Когда я использую приведенный ниже код, схема писателя записывается вместе с данными.

Job mrJob = org.apache.hadoop.mapreduce.Job.getInstance(JavaSparkContext.hadoopConfiguration());
AvroJob.setDataModelClass(mrJob, SpecificData.class);
AvroJob.setOutputKeySchema(mrJob, protectionSchema) // schema shown above
JavaPairRDD<AvroKey<GenericRecord>, NullWritable> encryptedData = encryptionMethod();
encryptedData.saveAsNewAPIHadoopFile("c:\\test", AvroKey.class, NullWritable.class, 
AvroKeyOutputFormat.class, mrJob.getConfiguration());

Но если я пытаюсь преобразовать схему в структуру Type и write с использованием spark, схема писателя не go с данные.

StructType type = (StructType)SchemaConverters.toSqlType(protectionSchema).dataType();
Dataset<Row> ds = SparkSession.createDataFrame(rdd, type);
ds.write();

Можно ли добиться того же с помощью искровой записи без использования метода saveAsNewAPIHadoopFile ().

...