繁体   English   中英

scala:将kafka中的csv保存为镶木地板格式的最佳wat?

[英]scala: best wat to save csv coming from kafka to parquet format?

我是scala / java的新手,所以请耐心等待。 我有一个Spark Streaming和Scala程序,该程序接收来自kafka的csv文件。 我知道我现在得到的是带有纯线的ReceiverInputDStream(尚无模式)。 我需要将收到的数据以拼花格式保存在HDFS中。 我想我可以简单地将线条保存在实木复合地板文件中(可以吗?)。 但我也明白,最好给明线加上一些模式(列和类型),以便使拼花地板可以将数据转换为列格式并获得更好的压缩率。 我对吗? 所以问题是,如何将我的ReceiverInputDStream转换为具有模式的内容(column1 type1,... columnN typeN)? 需要什么对象类型? 然后如何将这个新对象保存到镶木地板中? 谢谢。

如果您碰巧使用Spark,则可以

spark.read.parquet(parquetPath).write.csv(newcsvPath)

或者您可以将Spark Streaming作为Kafka客户端使用相同的功能

回答我自己,我能够为RDD提供格式,并同时使用以下代码将其转换为数据框

val viajesDF = splitRdd.map { case Array(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18) =>
yellowSchema(s0, s1, s2, s3.toInt, s4.toDouble, s5.toFloat, s6.toFloat, s7.toString, s8.toString,
s9.toFloat, s10.toFloat, s11, s12.toDouble, s13.toDouble,
s14.toDouble, s15.toDouble, s16.toDouble, s17.toDouble, s18.toDouble)
}.toDF()

在不同的scala对象中,将架构定义为案例类,如下所示

case class  yellowSchema (
                       vendor_id: String,
                       tpep_pickup_datetime: String,
                       tpep_dropoff_datetime: String,
                       passenger_count:  Long,
                       trip_distance: Double,
                       pickup_longitude: Float,
                       pickup_latitude: Float,
                       rate_code_id:  String,
                       store_and_fwd_flag:  String,
                       dropoff_longitude: Float,
                       dropoff_latitude: Float,
                       payment_type:  String,
                       fare_amount: Double,
                       extra: Double,
                       mta_tax: Double,
                       tip_amount: Double,
                       tolls_amount: Double,
                       improvement_surcharge: Double,
                       total_amount: Double
                     )

我最终以这种方式将DF写入实木复合地板:

viajesDateDF.write.mode(SaveMode.Append).parquet(parquetDest)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM