我相信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。例如,在上面的示例中,TUI
、DIAN
和SLD
是产品 ID。
我需要了解我存档了多少种产品。例如,第一行包含 1:TUI
,第二行包含 3:DIAN
、TUI
和SLD
。
总的来说,在这两条线上,我们可以看到有三种独特的产品。
谁能帮忙?
谢谢。任何启发都是值得赞赏的。
更新
我更喜欢基于带有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