我正在尝试在Pyspark中读取文件(Apache Spark with Python)。 文件内容例如:
13,13,25
13,13,125
13,25,25
13,25,37
13,25,41
13,25,66
13,25,71
13,25,73
13,25,84
13,25,116
...
我想创建这些序列的字典,如:
{(13,13,25):0, (13,25,37):1, (13,25,41):2, (13,25,66):3, ..... }
以下是我的尝试:
1)首先,我只尝试逐行读取文件
textFile = sc.textFile(file)
feat_map = textFile.map(lambda line: line)
print(feat_map.take(10))
输出(它将数字序列视为日期/时间):
[u'-------------------------------------------', u'Time: 2015-08-04 14:32:41', u'13,25,66', u'13,25,71', u'13,25,73', u'13,25,84', u'13,25,116']
2)在其他尝试中,我试图将各个数字分开以完成任务:
textFile = sc.textFile(file)
feat_map = textFile.map(lambda line: line.split(','))\
.map(lambda word: (int(word[0]), int(word[1]), int(word[2])))\
.zipWithIndex().collectAsMap()
print(feat_map)
我收到以下错误:
ValueError: invalid literal for int() with base 10: '-------------------------------------------'
我也试过int(float(word[x]))
,但它也没有用。
如何解析我的文件以生成字典?
答案 0 :(得分:0)
问题是你的第一行有值
-------------------------------------------
无法正确拆分并转换为整数。大概这是一个标题行或类似的东西?您需要过滤掉这一行。
答案 1 :(得分:0)
我试图在多个工作器上运行代码(在多台机器上)。代码在本地计算机上工作(MASTER=local[2]
)但在多台计算机上出错。经过多次尝试后,我收到错误的文件未找到。所以我把文件放在hdfs上并尝试2个代码工作。这是完整的代码:
txtFile = sc.textFile("hdfs://host:port/path/filename")
feat_map = txtFile.map(lambda line: line.split(','))\
.map(lambda word: (int(word[0]), int(word[1]), int(word[2])))\
.zipWithIndex().collectAsMap()
print(feat_map)