如何使用sparkstream读取文件并使用Scala写入简单文件?

时间:2016-12-13 10:41:58

标签: scala apache-spark spark-streaming parquet

我尝试使用scala SparkStreaming程序读取文件。该文件存储在本地计算机上的目录中,并尝试将其作为新文件写入本地计算机本身。但每当我编写我的流并将其存储为镶木地板时,我最终会得到空白文件夹。

这是我的代码:

 Logger.getLogger("org").setLevel(Level.ERROR)
 val spark = SparkSession
             .builder()
             .master("local[*]")
             .appName("StreamAFile")
             .config("spark.sql.warehouse.dir", "file:///C:/temp")
             .getOrCreate()


 import spark.implicits._            
 val schemaforfile = new StructType().add("SrNo",IntegerType).add("Name",StringType).add("Age",IntegerType).add("Friends",IntegerType)

 val file = spark.readStream.schema(schemaforfile).csv("C:\\SparkScala\\fakefriends.csv")  

 file.writeStream.format("parquet").start("C:\\Users\\roswal01\\Desktop\\streamed") 

 spark.stop()

我的代码或我出错的任何内容是否有任何遗漏?

我也尝试从hdfs位置读取此文件,但相同的代码最终没有在我的hdfs上创建任何输出文件夹。

1 个答案:

答案 0 :(得分:4)

你在这里犯了错误:

val file = spark.readStream.schema(schemaforfile).csv("C:\\SparkScala\\fakefriends.csv")  

csv()函数应该将目录路径作为参数。它将扫描此目录并在将所有新文件移动到此目录时读取所有新文件

对于检查点,您应该添加

.option("checkpointLocation", "path/to/HDFS/dir")

例如:

val query = file.writeStream.format("parquet")
    .option("checkpointLocation", "path/to/HDFS/dir")
    .start("C:\\Users\\roswal01\\Desktop\\streamed") 

query.awaitTermination()