如何计算给定 csv/psv 混合文本文件中的不同字段?



我相信Python是最好的选择,但我可能是错的。

下面是 Linux 中文本格式数据源的示例:

TUI,39832020:09:01,10.56| TUI,39832020:10:53,11.23| TUI,39832020:15:40,23.20
DIAN,39832020:09:04,11.56| TUI,39832020:11:45,11.23| DIAN,39832020:12:30,23.20| SLD,39832020:11:45,11.22

大小未知,让我们假设有一百万行。

每行包含三个或更多由|分隔的集合,每个集合都有用,分隔的字段。

每个集中的第一个字段是产品 ID。例如,在上面的示例中,TUIDIANSLD是产品 ID。

我需要了解我存档了多少种产品。例如,第一行包含 1:TUI,第二行包含 3:DIANTUISLD

总的来说,在这两条线上,我们可以看到有三种独特的产品。

谁能帮忙?

谢谢。任何启发都是值得赞赏的。

更新

我更喜欢基于带有Spark的Python解决方案,即pySpark。

我还在寻找以下统计数据:

  • 每种产品的总量;
  • 给定时间的所有记录(每组中的第二个字段,如39832020:09:01(;
  • 每种产品的最低和最高价格。

更新 2

谢谢大家的代码,我真的很感激。我想知道是否有人可以将数据写入RDD和/或数据帧。我知道在SparkSQL中获取这些统计信息非常简单。

提前非常感谢。

谢谢。

类似于 Accdias 答案:使用字典,逐行读取文件,按|然后按,拆分数据,然后汇总字典中的计数。

myFile="lines_to_read.txt"
productCounts = dict()
with open(myFile, 'r') as linesToRead:
for thisLine in linesToRead:
for myItem in thisLine.split("|"):
productCode=myItem.split(",")
productCode=productCode[0].strip()
if productCode in productCounts:
productCounts[productCode]+=1
else:
productCounts[productCode]=1
print(productCounts)

****更新**** 数据帧与 Pandas 一起使用,以便我们可以查询数据后的话的统计信息:

import pandas as pd
myFile="lines_to_read.txt"
myData = pd.DataFrame (columns=['prodID', 'timeStamp', 'prodPrice'])
with open(myFile, 'r') as linesToRead:
for thisLine in linesToRead:
for myItem in thisLine.split("|"):
thisItem=myItem.strip('n, " "').split(",")
myData = myData.append({'prodID':thisItem[0],'timeStamp':thisItem[1],'prodPrice':thisItem[2]}, ignore_index=True)
print(myData)   # Full Table
print(myData.groupby('prodID').agg({'prodID':'count'}))  # Total of prodID's
print(myData.loc[myData['timeStamp'] == '39832020:11:45']) # all lines where time = 39832020:11:45
print(myData.groupby('prodID').agg({'prodPrice':['min', 'max']})) # min/max prices

最新更新