如何使用火花流读取.csv文件并使用Scala写入镶木地板文件?

时间:2017-03-06 09:23:13

标签: scala csv apache-spark spark-streaming parquet

我尝试使用spark 2.1.0 SparkStreaming程序读取文件。 csv文件存储在我本地计算机上的目录中,并尝试在本地计算机上使用writestream镶木地板和新文件。但每当我在.parquet中尝试它总是出错或获取空白文件夹时。

这是我的代码:

case class TDCS_M05A(TimeInterval:String ,GantryFrom:String ,GantryTo:String ,VehicleType:Integer ,SpaceMeanSpeed:Integer ,CarTimes:Integer)

object Streamingcsv {
  def main(args: Array[String]) {

    val spark = SparkSession
      .builder
      .appName("Streamingcsv")
      .config("spark.master", "local")
      .getOrCreate()

    import spark.implicits._

    import org.apache.spark.sql.types._


    val schema = StructType(
        StructField("TimeInterval",DateType, false) ::
        StructField("GantryFrom", StringType, false) ::
        StructField("GantryTo", StringType, false) ::
        StructField("VehicleType", IntegerType, false) ::
        StructField("SpaceMeanSpeed", IntegerType, false) ::
        StructField("CarTimes", IntegerType, false) ::  Nil)


    import org.apache.spark.sql.Encoders

    val usrschema = Encoders.product[TDCS_M05A].schema

    val csvDF = spark.readStream
      .schema(usrschema) // Specify schema of the csv files
      .csv("/home/hduser/IdeaProjects/spark2.1/data/*.csv")


    val query = csvDF.select("GantryFrom").where("CarTimes > 0")

    query
      .writeStream
      .outputMode("append")
      .format("parquet")
      .option("checkpointLocation", "checkpoint")
      .start("/home/hduser/IdeaProjects/spark2.1/output/")
      //.parquet("/home/hduser/IdeaProjects/spark2.1/output/")
      //.start()

    query.awaitTermination()
  }

我参考页面How to read a file using sparkstreaming and write to a simple file using Scala? 并且它不起作用,请帮助我,谢谢。

1 个答案:

答案 0 :(得分:0)

在开始之前,您应该确保检查点目录存在(或创建它)。您的查询实现还应包括与您的DF分开的查询值。

如果您不需要,请不要放入包含空args的对象,以便您可以直接访问其他方法,例如

 query.lastProgress
 query.stop

(仅举几例)

将代码的后半部分更改为如下所示。

import org.apache.spark.sql.streaming.OutputMode

val csvQueriedDF = csvDF.select("GantryFrom").where("CarTimes > 0")

val query = csvQueriedDF
  .writeStream
  .outputMode(OutputMode.Append())
  .format("parquet")
  .option("checkpointLocation", "/home/hduser/IdeaProjects/spark2.1/partialTempOutput")
  .option("path", "/home/hduser/IdeaProjects/spark2.1/output/")
  .start()

最好的运气!

相关问题