Apache spark 如何将贴图拼花文件读取到案例类以供阅读

Apache spark 如何将贴图拼花文件读取到案例类以供阅读,apache-spark,parquet,Apache Spark,Parquet,我在rdd org.apache.spark.rdd.RDD[((String, String), (Array[Byte], Boolean))] 我把我的rdd写进了拼花地板 val myDf = spark.createDataFrame(myRdd).toDF("id", "vals") myDf.write.parquet("./myParquetDir") 现在我想找回它 我看到它有以下形式 Parquet form: message spark_schema { opti

我在
rdd

org.apache.spark.rdd.RDD[((String, String), (Array[Byte], Boolean))]
我把我的
rdd
写进了拼花地板

val myDf = spark.createDataFrame(myRdd).toDF("id", "vals")

myDf.write.parquet("./myParquetDir")
现在我想找回它

我看到它有以下形式

Parquet form:
message spark_schema {
  optional group myId {
    optional binary _1 (UTF8);
    optional binary _2 (UTF8);
  }
  optional group myVal {
    optional binary _1;
    required boolean _2;
  }
}

Catalyst form:
StructType(StructField(myId,StructType(StructField(_1,StringType,true), StructField(_2,StringType,true)),true), StructField(myVal,StructType(StructField(_1,BinaryType,true), StructField(_2,BooleanType,true)),true))
所以我创造了

case class MySchema(
  myId: (String, String),
  myVal: (Array[Byte], Boolean)
)

val myParquetFileDf = spark.read.parquet("./myParquetDir")
val myParseDf = myParquetFileDf.as[MySchema].map( row=>
    println(row)
    row
).show(1, false)
但我犯了一个错误

 org.apache.spark.sql.AnalysisException: Try to map struct<myId:struct<_1:string,_2:string>,myVal:struct<_1:binary,_2:boolean>> to Tuple1, but failed as the number of fields does not line up.;
org.apache.spark.sql.AnalysisException:尝试将struct映射到Tuple1,但由于字段数不一致而失败。;
我不明白,df模式不应该完全映射到我的rdd类型吗


有人能给我指个方向吗?

myParquetFileDf.as[((字符串,字符串),(数组[Byte],Boolean))]有用吗?谢谢,它有用,顺便说一句,我很好奇,有没有更干净的方法做这项工作?myParquetFileDf.as[((字符串,字符串),(数组[Byte],Boolean))]有用吗?谢谢,有用,顺便说一句,我很好奇,有没有更干净的工作方法?