从adl gen 1读取csv,带限制

k5hmc34c  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(409)

用例

我的spark应用程序从azure data lake store gen.1读取csv文件。
可以为应用程序提供只读取前n行的选项。

代码

此代码段的参数包括: sc : SparkContext -使用自定义配置访问azure datalake存储 basePath : String -格式为的azure datalake目录
adl://xxxx.azuredatalakestore.net/a structType: StructType -由基本数据类型组成的约20-30行的自定义模式 headOption: Option[Int] ```
val input = sc.read
.format("csv")
.option("inferSchema", value = false)
.option("header", value = true)
.option("delimiter", "\t")
.option("badRecordsPath", "/tmp/badRecordsPath")
.schema(structType)
.load(basePath + "/b/c/d")

val limited =
if (headOption.isDefined) input.limit(headOption.get)
else input

limited.show(true)

当然,show已经截断了数据,但是它应该只被看作是将来操作的占位符。
我已经证实,在使用其他行为时也有类似的行为,例如 `.count()` .

## 问题

什么时候 `headOption` 定义,因此。 `.limit(5)` 使用时,运行时间将增加多个数量级。
在本例中,调试日志显示如下连续请求:

com.microsoft.azure.datalake.store.HttpTransport: HTTPRequest,Succeeded,cReqId:xxxxxx,lat:39,err:,Reqlen:0,Resplen:chunked,token_ns:38300,sReqId:xxxxx,path:/a/b/c/d/xxxxx.txt,qp:op=OPEN&filesessionid=xxxxx&length=4194304&read=true&offset=167772160&api-version=2016-11-01

每个请求的偏移量都在增加,这表明整个文件(约70 gb)的接收速度很慢。
如果没有使用限制,调试日志只显示少数没有偏移量的请求,这表明实际上只请求前20行 `.show(true)` .

## 问题

这种方法有什么问题吗?或者这是虫子?
kninwzqo

kninwzqo1#

方法 limit 读取所有数据,然后创建一个新的Dataframe,其中只显示行数。
正如你所说的,对我来说也是一样 count 以及任何其他行动
方法 take 可能对你很好,因为它看起来快一点。但它又回来了 Array[Row] 而不是Dataframe

相关问题