在PySpark中使用Map解析和分配列名

时间:2018-08-14 12:54:07

标签: dictionary pyspark rdd flatmap dstream

这就是我想要做的。

输入数据如下(制表符分隔):

12/01/2018 user1 123.123.222.111 23.3s
12/01/2018 user2 123.123.222.116 21.1s

数据通过Kafka传入,并使用以下代码进行解析。

kafkaStream = KafkaUtils.createStream(ssc, zkQuorum, "spark-streaming-consumer", {topic: 1})
lines = kafkaStream.map(lambda x: x[1])
parsed_log = lines.flatMap(lambda line: line.split(" "))
                  .map(lambda item: ('key', {
                  'date': item['date'],
                  'user': item['user'],
                  'ip': item['ip'],
                  'duration': item['duration'],}))

解析后的日志应采用以下格式:

('key', {'date': 12/01/2018, 'user': user1, 'ip': 123.123.222.111, 'duration': 23.3s}) 
('key', {'date': 12/01/2018, 'user': user2, 'ip': 123.123.222.116, 'duration': 21.1s})

在我的代码中,“ lines”和“ parsed_log”的代码行不起作用。你能让我知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

这是解决方案:

#include <stdio.h>

/* Comment / uncomment this to change behaviour */
#define REDIRECT_TEST

#ifdef REDIRECT_TEST
#  define my_test(msg) printf("REDIRECTED:%s\n", msg)
#else
#  define my_test      test    
#endif

void test(const char *msg) {
    printf("%s\n", msg);
}

void main(void) {
    my_test("hello");
}