我尝试使用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上创建任何输出文件夹。
答案 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()