我被困在将avro数据帧转换为GenericRecord / ByteArray,我在谷歌浏览,他们为我提供了相反的解决方案。
是否有人尝试过将AVRO RDD / Dataframe转换为Scala中的GenericRecord或ByteArray?
我用这个命令来读取我的avro文件。
spark.read.avro("/app/q.avro")
它返回我这样的数据帧。
res0: org.apache.spark.sql.DataFrame = [recordType: string, recordVersion: string ... 6 more fields]
那么如何将sql.DataFrame转换为GenericRecord / ByteArray?
答案 0 :(得分:0)
创建数据框后:
val df=spark.read.avro("/app/q.avro")
您可以将其转换为rdd或字符串列表。
val listOfStrings=df.rdd.collect.toList
现在,您可以将字符串列表转换为byteArray,如下所示:
scala> var lst=List("scala","Java","Python","JavaScript")
lst: List[String] = List(scala, Java, Python, JavaScript)
scala> lst.map(_.getBytes).toArray
res5: Array[Array[Byte]] = Array(Array(115, 99, 97, 108, 97), Array(74, 97, 118, 97), Array(80, 121, 116, 104, 111, 110), Array(74, 97, 118, 97, 83, 99, 114, 105, 112, 116))