如何在scala中将数据帧从avro转换为GenericRecord

时间:2017-10-16 04:48:47

标签: scala apache-spark

我被困在将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?

1 个答案:

答案 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))