老实说,parse其实是最难的

w
walkrandom
楼主 (未名空间)

leetcode史上最难三道题,全是parse。就没几个人做对过

420 Strong Password Checker 14.3% Hard
65 Valid Number 15.1% Hard
8 String to Integer (atoi) 15.3% Medium

所以,能用库就用库,不用库就等报错
s
squirrelrun

这就去做题。

【 在 walkrandom (walkrandom) 的大作中提到: 】
: leetcode史上最难三道题,全是parse。就没几个人做对过
: 420 Strong Password Checker 14.3% Hard
: 65 Valid Number 15.1% Hard
: 8 String to Integer (atoi) 15.3% Medium
: 所以,能用库就用库,不用库就等报错

g
guvest

parse能不写就不写。还有一个原因是,常见的数据格式的parse,能用的库比较多。
数据预处理一下,丢给开源parse,问题不大。

【 在 walkrandom (walkrandom) 的大作中提到: 】
: leetcode史上最难三道题,全是parse。就没几个人做对过
: 420 Strong Password Checker 14.3% Hard
: 65 Valid Number 15.1% Hard
: 8 String to Integer (atoi) 15.3% Medium
: 所以,能用库就用库,不用库就等报错

C
Caravel

csv哪有那么难搞,就怕有些人把comment, quote什么都加进去瞎搞。定好规矩,就好办了。

【 在 walkrandom (walkrandom) 的大作中提到: 】
: leetcode史上最难三道题,全是parse。就没几个人做对过
: 420 Strong Password Checker 14.3% Hard
: 65 Valid Number 15.1% Hard
: 8 String to Integer (atoi) 15.3% Medium
: 所以,能用库就用库,不用库就等报错

g
guvest

csv有标准协议。但是就是这么难搞。
【 在 Caravel (克拉维尔) 的大作中提到: 】
: csv哪有那么难搞,就怕有些人把comment, quote什么都加进去瞎搞。定好规矩,就好
: 办了。

C
Caravel

标准协议没人follow, 一般人不需要handle所有case,把字符集分隔符定好, linux line end,不许用引号,problem solved。非要在field里面用分隔符,加引号,是自
己跟自己过不去。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: csv有标准协议。但是就是这么难搞。

g
guvest

你这样搞。大点的项目到最后,累积的不确定性叠加组合,就失控了。

用库是正确的做法。加上边界测试。
【 在 Caravel(克拉维尔) 的大作中提到: 】
<br>: 一般人不需要handle所有case,把字符集分隔符定好, linux line end
,不许
用引号
<br>: ,problem solved。
<br>

C
Caravel

大型项目,更要enforce纪律,每个interface spec写好,立下字据,谁break了谁负责fix。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你这样搞。大点的项目到最后,累积的不确定性叠加组合,就失控了。
: 用库是正确的做法。加上边界测试。
:
: 一般人不需要handle所有case,把字符集分隔符定好, linux line end
: ,不许
: 用引号
:
: ,problem solved。
:

g
guvest

你得先找到谁break了才行。

【 在 Caravel(克拉维尔) 的大作中提到: 】

: 大型项目,更要enforce纪律,每个interface spec写好,立下字据,谁break了谁负责

: fix。

s
sunshineboy

parser的确是编程基本功 重要性不言而喻

2017年cloudflare就是因为Nginx上的一个parser bug导致大面积key泄漏

2019年CloudFlare又是因为一个regex错误 导致大面积宕机

n
netghost

我覺得非常可笑,exactly實戰中csv基本上是沒有parse的問題的。一般能100G以上的
都用csv存的,裏面的東西都是老老實實的逗號只做分割用途。

他去扯parse這些有啥意思嗎?100G會搞就是會搞,不會就是不會。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: parse能不写就不写。还有一个原因是,常见的数据格式的parse,能用的库比较多。: 数据预处理一下,丢给开源parse,问题不大。

n
netghost

cloudflare的techlead如果能把他們成天post blog一半的時間拿去好好搞他們的服務
,就不會有這些爛事了。
【 在 sunshineboy (阳光男孩) 的大作中提到: 】
: parser的确是编程基本功 重要性不言而喻
: 2017年cloudflare就是因为Nginx上的一个parser bug导致大面积key泄漏
: 2019年CloudFlare又是因为一个regex错误 导致大面积宕机

m
magliner

这个说的对,要和对方说清楚, csv又不是垃圾桶,随便什么东西都能往里装。 去邮
局寄个东西,邮局也得问问你,易燃?易爆?液体? 给邮局多少钱也不是什么垃圾都
能寄的 。
以后谁把垃圾往csv里面放,谁滚蛋。 这个要求不过分吧。
【 在 Caravel (克拉维尔) 的大作中提到: 】
: 大型项目,更要enforce纪律,每个interface spec写好,立下字据,谁break了谁负责
: fix。

g
guvest

数据的来源往往是客户。选择给他们培训,或者自己改软件包括更多的corner cases。各有优劣。

再一个,你搜一下excel csv带来的问题。这是另外一类。

【 在 magliner(magliner) 的大作中提到: 】

: 这个说的对,要和对方说清楚, csv又不是垃圾桶,随便什么东西都能往里装。 去邮

: 局寄个东西,邮局也得问问你,易燃?易爆?液体? 给邮局多少钱也不是什么
垃圾都

: 能寄的 。

: 以后谁把垃圾往csv里面放,谁滚蛋。 这个要求不过分吧。

i
insect9

引号加转义用yacc 处理又不难。要大范围使用的地方就老老实实上全功能的编译器呗
。自己小范围用的就随便怎么操了。

【 在 guvest 的大作中提到: 】
:
:csv有标准协议。但是就是这么难搞。
:【 在 Caravel (克拉维尔) 的大作中提到: 】
:: csv哪有那么难搞,就怕有些人把comment, quote什么都加进去瞎搞。定好规矩,
就好
:: 办了。
:
:
:
:

h
hadoop2

你说的是对的。前面那几个人一看就是没做过什么项目,基本还活在温室里。

实际中很多RAW数据就是很noisy,比如医疗上的直接从clinic来的。还有些schema定好的数据,都可能出各种幺蛾子,比如telemetry的数据流。pre-processing这块儿还是
很麻烦的。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 数据的来源往往是客户。选择给他们培训,或者自己改软件包括更多的corner cases。
: 各有优劣。
: 再一个,你搜一下excel csv带来的问题。这是另外一类。
:
: 这个说的对,要和对方说清楚, csv又不是垃圾桶,随便什么东西都能往里装。
: 去邮
:
: 局寄个东西,邮局也得问问你,易燃?易爆?液体? 给邮局多少钱也不是什么
: 垃圾都
:
: 能寄的 。
:
: 以后谁把垃圾往csv里面放,谁滚蛋。 这个要求不过分吧。
:

s
sanwadie

处理复杂数据流程里的垃圾数据,不是在每个环节添加处理代码,而是对垃圾进行预处理。以csv里的垃圾数据,我会这样处理,1)csv的parser肯定用通用库,不会做任何
修改,parser自身的bug会反馈给开发者,尽量通过依赖解决,不自己折腾;2)对垃圾数据进行预处理。3)预处理部分根据不同情况进行相关处理,不同的来源,会有不同
的处理方式,没有必要强塞到一个非常复杂的代码里;而且根据具体情况和分工,未必是自己的工作,比如给源方一些提示,说不定他们一个小修改就搞定。4)另外对垃圾
要学会拒绝,学会引导客户或源端遵守必要的工业规范,不是一味迁就,迁就的结果是,会把自己和团队搞到筋疲力尽,最后做项目失败的背锅侠。

另外大家讨论问题,不要动不动就去贬低质疑其他人的能力。老实说,到这里来发帖或求问,都差不多吧,就算有差别,也不会大过图灵和某网红吧。

葵花版给了我很多帮助和乐趣,最近有闲,来得多了,发些贴,算是一点小反馈。
g
guvest

不管预处理或者程序里面改,都以测试第三方库为基础。还有就是得知道文本文件是怎么回事,csv常见的坑在哪里。不然越处理错误越多。现今有专门的data engineer这个职称,不是全无道理的。

【 在 sanwadie(三娃爹) 的大作中提到: 】
<br>: 处理复杂数据流程里的垃圾数据,不是在每个环节添加处理代码,而是对垃圾进
行预处
<br>: 理。以csv里的垃圾数据,我会这样处理,1)csv的parser肯定用通用库
,不会
做任何
<br>: 修改,parser自身的bug会反馈给开发者,尽量通过依赖解决,不自己折
腾;2)
对垃圾
<br>: 数据进行预处理。3)预处理部分根据不同情况进行相关处理,不同的来
源,会
有不同
<br>: 的处理方式,没有必要强塞到一个非常复杂的代码里;而且根据具体情况和分工
,未必
<br>: 是自己的工作,比如给源方一些提示,说不定他们一个小修改就搞定。4
)另外
对垃圾
<br>: 要学会拒绝,学会引导客户或源端遵守必要的工业规范,不是一味迁就,迁就的
结果是
<br>: ,会把自己和团队搞到筋疲力尽,最后做项目失败的背锅侠。
<br>: 另外大家讨论问题,不要动不动就去贬低质疑其他人的能力。老实说,到这里来
发帖或
<br>: 求问,都差不多吧,就算有差别,也不会大过图灵和某网红吧。
: ...................
<br>