gpt4 book ai didi

scala - 使用 Scala for Spark 编写 Parquet 文件,无需将 Spark 作为依赖项

转载 作者:行者123 更新时间:2023-12-02 00:43:14 31 4
gpt4 key购买 nike

我想将我的集合写入 .parquet 文件,以便稍后可以使用 Spark 读取它。

到目前为止,我正在使用以下代码创建文件:

package com.contrib.parquet

import org.apache.avro.SchemaBuilder
import org.apache.avro.reflect.ReflectData
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.Path
import org.apache.parquet.avro.AvroParquetWriter
import org.apache.parquet.hadoop.{ParquetFileWriter, ParquetWriter}
import org.apache.parquet.hadoop.metadata.CompressionCodecName

object ParquetWriter {
def main(args: Array[String]): Unit = {

val schema = SchemaBuilder
.record("Record")
.fields()
.requiredString("name")
.requiredInt("id")
.endRecord()

val writer: ParquetWriter[Record] = AvroParquetWriter
.builder(new Path("/tmp/parquetResult"))
.withConf(new Configuration)
.withDataModel(ReflectData.get)
.withCompressionCodec(CompressionCodecName.SNAPPY)
.withSchema(schema)
.withWriteMode(ParquetFileWriter.Mode.OVERWRITE)
.build()

Seq(Record("nameOne", 1), Record("nameTwo", 2)).foreach(writer.write)
writer.close()
}

case class Record(name: String, id: Int)
}

成功创建 Parquet 文件。当我尝试使用 Spark 读取该文件时,出现 java.lang.NoSuchMethodError: org.apache.parquet.column.values.ValuesReader.initFromPage 错误。

Spark 代码:

val master = "local[4]"
val sparkCtx = SparkSession
.builder()
.appName("ParquetReader")
.master(master)
.getOrCreate()

val schema = Encoders.product[Record].schema
val df = sparkCtx.read.parquet("/tmp/parquetResult")
df.show(100, false)

如何编写 Parquet 文件以便可以使用 Spark 读取它们?我不想让本地 Spark 应用程序只是为了编写此文件。

最佳答案

我们最终使用了开源库:https://github.com/mjakubowski84/parquet4s

关于scala - 使用 Scala for Spark 编写 Parquet 文件,无需将 Spark 作为依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52558406/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com