我尝试使用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? 并且它不起作用,请帮助我,谢谢。
答案 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()
最好的运气!