У меня есть зашифрованные данные в формате 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 ().