Python将整数序列视为日期/时间数据

时间:2015-08-21 12:37:48

标签: apache-spark pyspark

我正在尝试在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])),但它也没有用。

如何解析我的文件以生成字典?

2 个答案:

答案 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)