我正在努力弄清spark
中流媒体的工作原理。
我在/data/flight-data/csv/
目录中有一个文件。它具有以下数据:
DEST_COUNTRY_NAME ORIGIN_COUNTRY_NAME count
United States Romania 15
United States Croatia 1
United States Ireland 344
Egypt United States 15
我想测试一下,如果我以流而不是批处理的方式读取文件会发生什么。我首先使用Dataframe
read
scala> val dataDF = spark.read.option("inferSchema","true").option("header","true").csv("data/flight-data/csv/2015-summary.csv");
[Stage 0:> dataDF: org.apache.spark.sql.DataFrame = [DEST_COUNTRY_NAME: string, ORIGIN_COUNTRY_NAME: string ... 1 more field]
然后从中获取架构,并创建一个新的Dataframe
scala> val staticSchema = dataDF.schema;
staticSchema: org.apache.spark.sql.types.StructType = StructType(StructField(DEST_COUNTRY_NAME,StringType,true), StructField(ORIGIN_COUNTRY_NAME,StringType,true), StructField(count,IntegerType,true))
scala> val dataStream = spark.readStream.schema(staticSchema).option("header","true").csv("data/flight-data/csv");
dataStream: org.apache.spark.sql.DataFrame = [DEST_COUNTRY_NAME: string, ORIGIN_COUNTRY_NAME: string ... 1 more field]
然后我开始直播。检查点和输出(我想)的路径是`/ home / manu / test“目录,该目录最初是空的。
scala> dataStream.writeStream.option("checkpointLocation","home/manu/test").start("/home/manu/test");
res5: org.apache.spark.sql.streaming.StreamingQuery = org.apache.spark.sql.execution.streaming.StreamingQueryWrapper@5c7df5f1
start
的返回值为StreamingQuery
,我读的是A handle to a query that is executing continuously in the background as new data arrives. All these methods are thread-safe.
我注意到现在目录中有一个目录_spark_metadata
,但是没有别的。
问题1-什么是_spark_metadata
目录?我注意到它是空的。它是做什么用的?
问题2-我什么都没看到。是因为我没有在Dataframe
dataStream
上运行任何查询(还是我应该说该查询没有做任何有用的事情)?