JavaPairRDD для набора данных<Row> в SPARK
У меня есть данные в JavaPairRDD в формате
JavaPairdRDD<Tuple2<String, Tuple2<String,String>>>
Я пытался использовать приведенный ниже код
Encoder<Tuple2<String, Tuple2<String,String>>> encoder2 =
Encoders.tuple(Encoders.STRING(), Encoders.tuple(Encoders.STRING(),Encoders.STRING()));
Dataset<Row> userViolationsDetails = spark.createDataset(JavaPairRDD.toRDD(MY_RDD),encoder2).toDF("value1","value2");
Но как сгенерировать набор данных с 3 столбцами??? В результате вышеприведенного кода я получаю данные в 2 столбцах. Любые указатели / предложения???
1 ответ
Попробуй запустить printSchema
- вы увидите, что значение2 является сложным типом.
Имея такую информацию, вы можете написать:
Dataset<Row> uvd = userViolationsDetails.selectExpr("value1", "value2._1 as value2", "value2._2 as value3")
value2._1
означает первый элемент кортежа внутри текущего поля "value2". Мы перезаписываем поле value2, чтобы иметь только одно значение
Обратите внимание, что это будет работать после того, как https://issues.apache.org/jira/browse/SPARK-24548 будет объединен с главной веткой. В настоящее время в Spark есть ошибка, и кортеж преобразуется в структуру с двумя полями с именем value