本文整理汇总了Scala中org.apache.parquet.hadoop.api.WriteSupport类的典型用法代码示例。如果您正苦于以下问题:Scala WriteSupport类的具体用法?Scala WriteSupport怎么用?Scala WriteSupport使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WriteSupport类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Scala代码示例。
示例1: ScalaPBWriteSupport
//设置package包名称以及导入依赖的类
package com.trueaccord.scalapb.parquet
import java.util
import com.google.protobuf.Descriptors.Descriptor
import com.trueaccord.scalapb.{GeneratedMessage, Message}
import org.apache.hadoop.conf.Configuration
import org.apache.parquet.hadoop.BadConfigurationException
import org.apache.parquet.hadoop.api.WriteSupport
import org.apache.parquet.hadoop.api.WriteSupport.WriteContext
import org.apache.parquet.io.api.RecordConsumer
import org.apache.parquet.schema.MessageType
class ScalaPBWriteSupport[T <: GeneratedMessage with Message[T]] extends WriteSupport[T] {
var pbClass: Class[T] = null
var recordConsumer: RecordConsumer = null
override def init(configuration: Configuration): WriteContext = {
if (pbClass == null) {
pbClass = configuration.getClass(ScalaPBWriteSupport.SCALAPB_CLASS_WRITE, null, classOf[GeneratedMessage]).asInstanceOf[Class[T]]
if (pbClass == null) {
throw new BadConfigurationException("ScalaPB class not specified. Please use ScalaPBOutputFormat.setMessageClass.")
}
}
val descriptor: Descriptor = pbClass.getMethod("descriptor").invoke(null).asInstanceOf[Descriptor]
val rootSchema: MessageType = SchemaConverter.convert(descriptor)
val extraMetaDtata = new util.HashMap[String, String]
extraMetaDtata.put(ScalaPBReadSupport.PB_CLASS, pbClass.getName)
new WriteContext(rootSchema, extraMetaDtata)
}
override def write(record: T): Unit = {
MessageWriter.writeTopLevelMessage(recordConsumer, record)
}
override def prepareForWrite(recordConsumer: RecordConsumer): Unit = {
this.recordConsumer = recordConsumer
}
}
object ScalaPBWriteSupport {
val SCALAPB_CLASS_WRITE = "parquet.scalapb.writeClass"
def setSchema[T <: GeneratedMessage](config: Configuration, protoClass: Class[T]) = {
config.setClass(SCALAPB_CLASS_WRITE, protoClass, classOf[GeneratedMessage])
}
}
示例2: RowWriteSupport
//设置package包名称以及导入依赖的类
package io.eels.component.parquet
import com.sksamuel.exts.Logging
import io.eels.Row
import org.apache.hadoop.conf.Configuration
import org.apache.parquet.hadoop.api.WriteSupport
import org.apache.parquet.hadoop.api.WriteSupport.FinalizedWriteContext
import org.apache.parquet.io.api.RecordConsumer
import org.apache.parquet.schema.MessageType
import scala.collection.JavaConverters._
import scala.math.BigDecimal.RoundingMode.RoundingMode
// implementation of WriteSupport for Row's used by the native ParquetWriter
class RowWriteSupport(schema: MessageType,
roundingMode: RoundingMode,
metadata: Map[String, String]) extends WriteSupport[Row] with Logging {
logger.trace(s"Created parquet row write support for schema message type $schema")
private var writer: RowWriter = _
override def finalizeWrite(): FinalizedWriteContext = new FinalizedWriteContext(metadata.asJava)
def init(configuration: Configuration): WriteSupport.WriteContext = {
new WriteSupport.WriteContext(schema, new java.util.HashMap())
}
def prepareForWrite(record: RecordConsumer) {
writer = new RowWriter(record, roundingMode)
}
def write(row: Row) {
writer.write(row)
}
}
class RowWriter(record: RecordConsumer, roundingMode: RoundingMode) {
def write(row: Row): Unit = {
record.startMessage()
val writer = new StructRecordWriter(row.schema, roundingMode, false)
writer.write(record, row.values)
record.endMessage()
}
}
示例3: RowParquetWriterFn
//设置package包名称以及导入依赖的类
package io.eels.component.parquet
import io.eels.Row
import io.eels.schema.StructType
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.Path
import org.apache.parquet.column.ParquetProperties
import org.apache.parquet.hadoop.api.WriteSupport
import org.apache.parquet.hadoop.{ParquetFileWriter, ParquetWriter}
import org.apache.parquet.schema.MessageType
import scala.math.BigDecimal.RoundingMode.RoundingMode
object RowParquetWriterFn {
class RowParquetWriterBuilder(path: Path,
schema: MessageType,
roundingMode: RoundingMode,
metadata: Map[String, String])
extends ParquetWriter.Builder[Row, RowParquetWriterBuilder](path) {
override def getWriteSupport(conf: Configuration): WriteSupport[Row] = new RowWriteSupport(schema, roundingMode, metadata)
override def self(): RowParquetWriterBuilder = this
}
def apply(path: Path,
schema: StructType,
metadata: Map[String, String],
dictionary: Boolean,
roundingMode: RoundingMode): ParquetWriter[Row] = {
val config = ParquetWriterConfig()
val messageType = ParquetSchemaFns.toParquetMessageType(schema)
new RowParquetWriterBuilder(path, messageType, roundingMode, metadata)
.withCompressionCodec(config.compressionCodec)
.withDictionaryEncoding(dictionary)
.withDictionaryPageSize(ParquetProperties.DEFAULT_DICTIONARY_PAGE_SIZE)
.withPageSize(config.pageSize)
.withRowGroupSize(config.blockSize)
.withValidation(config.validating)
.withWriteMode(ParquetFileWriter.Mode.CREATE)
.withWriterVersion(ParquetProperties.DEFAULT_WRITER_VERSION)
.build()
}
}