Byzer 支持存储为 txt 格式的文件
smallTank007 opened this issue · 2 comments
需要支持将byzer引擎处理的数据通过save语法保存成text文件,并支持将text文件load进byzer引擎。支持的参数包括:是否包含表头,指定分隔符,指定逃逸字符,指定字符编码。
需求整理
当前 Byzer 是无法支持 Save 为 txt 为后缀的文件格式,从该需求来看,实际上想要存储的是一个 csv 文件,并且能够定义一些参数比如
- 表头:
header
, 默认 false - 分隔符:
sep
, 默认为,
- 逃逸字符: 'escape
, 默认为
` - 字符编码:
encoding
, 默认为UTF-8
参数详情可参考文档 CSV Files
基于 Byzer(Spark)的原理,任何存储的文件,都会遵守大数据分布式体系下的标准,比如存储 table_a
以 csv 的格式上存储至路径 /tmp/saved_data/table_a.csv
, 实际上在执行存储时,会将 /tmp/saved_data/table_a.csv
存储为一个路径,实际上数据文件会以分片的方式存储在该目录下,并不会将 table_a
存储为 /tmp/saved_data/
目录下的 table.csv
文件。
存储之后 /tmp/saved_data/table_a.csv
路径下会以类似的方式进行组织数据分片, 每个分片有 table_a
的部分数据
_SUCCESS
part-00000-1056a538-99af-4441-8928-12c5701df9c0-c000.csv
part-00001-1056a538-99af-4441-8928-12c5701df9c0-c000.csv
part-00002-1056a538-99af-4441-8928-12c5701df9c0-c000.csv
问题
用户希望将表生成 txt 后缀的文件(而实际从需求看,就是一个 csv 文本), 这里问题是,这里对 txt 文件的需求是什么:
- 下游消费这些 txt 文件的是人还是程序或者代码?
- 真正需要的是数据分片文件以 txt 结尾,还是需要一个单一的 txt 文件?
- csv 后缀为什么不满足需求?
从产品的需求来讲,希望的路径是,用户在基于 Byzer 引擎做的上层产品界面上提供下载数据文件的能力,用户可以手动的通过填入表单的方式进行一些参数的定义和填写,最后可以将单一的文件存储至
由于面向的用户群体使用的工具链的原因,他们更 prefer 以 txt 为结尾的文件类型。
这里从技术实现的角度,建议在产品侧的“下载”能力上,实现方案如下:
- 表单中的分隔符,逃逸字符等参数等,可以直接通过 save csv 作为数据源生成正确的 csv 文件路径,作为临时路径
- 对上述步骤生成的数据路径做文件的合并,然后提供前端用户传进来的表单的后缀名,对合并的文件进行 rename
- 生成之后对临时路径进行删除即可
- 以流的方式提供下载