1
- ; ; TODO: Make generic? Only works on list right now
2
1
(define (mrs:feed-data data-set ds-elt-sequence )
3
2
(for-each (lambda (ds-elt )
4
3
(ds-add-elt data-set ds-elt))
20
19
data-set
21
20
(map (lambda (kv )
22
21
(create-ds-elt (car kv) (cadr kv))) key-value-list)))
23
-
24
- (define *output-callback* #f )
25
-
26
- (define (mrs:run-computation-with-callback thunk callback )
27
- (with-time-sharing-conspiracy
28
- (lambda ()
29
- (let ((output-done #f ))
30
- (fluid-let
31
- ((*output-callback*
32
- (lambda (ds-elt )
33
- (cond ((ds-elt-done? ds-elt)
34
- (set! output-done #t ))
35
- (else
36
- (callback
37
- (ds-elt-key ds-elt)
38
- (ds-elt-value ds-elt)))))))
39
- (thunk)
40
- (flush-input-data-sets)
41
- (let lp ()
42
- (conspire:thread-yield)
43
- (if output-done
44
- 'done
45
- (lp))))))))
46
-
47
- (define (mrs:run-computation thunk )
48
- (let ((output-value '() ))
49
- (let ((output-callback
50
- (lambda (k v )
51
- (set! output-value
52
- (cons (list k v)
53
- output-value)))))
54
- (mrs:run-computation-with-callback thunk output-callback)
55
- output-value)))
56
-
57
- #|
58
- (define (test1 )
59
- (define ds-input (mrs:create-data-set))
60
- (define ds1 (mrs:create-data-set))
61
- (mrs:print-streaming ds-input 'ds1 )
62
- (mrs:feed-value-list ds-input ' (1 2 3 4 )))
63
- (mrs:run-computation test1)
64
- ; -> (ds1 0 1)
65
- ; (ds1 1 2)
66
- ; (ds1 2 3)
67
- ; (ds1 3 4)
68
- ; (ds1 done)
69
-
70
- (define (test2 )
71
- (define ds-input (mrs:create-data-set))
72
- (define ds1 (mrs:create-data-set))
73
- (mrs:map
74
- (lambda (key value )
75
- (mrs:emit key (* 10 value)))
76
- ds-input
77
- ds1)
78
- (mrs:print-streaming ds1 'ds1 )
79
- (mrs:feed-value-list ds-input ' (1 2 3 4 )))
80
- (mrs:run-computation test2)
81
- ; (ds1 3 40)
82
- ; (ds1 0 10)
83
- ; (ds1 1 20)
84
- ; (ds1 2 30)
85
- ; (ds1 done)
86
-
87
- (define (test3 )
88
- (define ds-input (mrs:create-data-set))
89
- (define ds1 (mrs:create-data-set))
90
- (mrs:map
91
- (lambda (key value )
92
- (mrs:emit key (* 10 value)))
93
- ds-input
94
- ds1)
95
- (mrs:map
96
- (lambda (key value )
97
- (mrs:emit key (* 11 value)))
98
- ds-input
99
- ds1)
100
- (mrs:print-streaming ds1 'ds1 )
101
- (mrs:feed-value-list ds-input ' (1 2 3 4 )))
102
- (mrs:run-computation test3)
103
- ; (ds1 1 20)
104
- ; (ds1 2 30)
105
- ; (ds1 3 40)
106
- ; (ds1 0 10)
107
- ; (ds1 1 22)
108
- ; (ds1 2 33)
109
- ; (ds1 3 44)
110
- ; (ds1 0 11)
111
- ; (ds1 done)
112
-
113
- (define (test4 )
114
- (define ds-input (mrs:create-data-set))
115
- (define ds1 (mrs:create-data-set))
116
- (mrs:aggregate
117
- ds-input
118
- ds1)
119
- (mrs:print-streaming ds1 'ds1 )
120
- (mrs:feed-value-list ds-input ' (1 2 3 4 ))
121
- (mrs:feed-value-list ds-input ' (3 3 3 3 ))
122
- (mrs:feed-value-list ds-input ' (1 4 3 4 )))
123
- (mrs:run-computation test4)
124
- ; (ds1 3 (4 3 4))
125
- ; (ds1 2 (3 3 3))
126
- ; (ds1 1 (4 3 2))
127
- ; (ds1 0 (1 3 1))
128
- ; (ds1 done)
129
-
130
- (define (test5 )
131
- (define ds-input (mrs:create-data-set))
132
- (define ds1 (mrs:create-data-set))
133
- (define ds2 (mrs:create-data-set))
134
- (mrs:map
135
- (lambda (key value )
136
- (mrs:emit key (* 10 value)))
137
- ds-input
138
- ds1)
139
- (mrs:reduce
140
- (lambda (key values )
141
- (mrs:emit key (apply + values)))
142
- ds1
143
- ds2)
144
- (mrs:print-streaming ds1 'ds1 )
145
- (mrs:print-streaming ds2 'ds2 )
146
- (mrs:feed-value-list ds-input ' (1 1 3 5 ))
147
- (mrs:feed-value-list ds-input ' (2 2 1 4 ))
148
- (mrs:feed-value-list ds-input ' (3 1 0 3 )))
149
- (mrs:run-computation test5)
150
- ; (ds1 3 50)
151
- ; (ds1 0 20)
152
- ; (ds1 0 10)
153
- ; (ds1 1 10)
154
- ; (ds1 2 30)
155
- ; (ds1 0 30)
156
- ; (ds1 1 10)
157
- ; (ds1 1 20)
158
- ; (ds1 2 10)
159
- ; (ds1 3 40)
160
- ; (ds1 2 0)
161
- ; (ds1 3 30)
162
- ; (ds1 done)
163
- ; (ds2 3 120)
164
- ; (ds2 2 40)
165
- ; (ds2 1 40)
166
- ; (ds2 0 60)
167
- ; (ds2 done)
168
-
169
-
170
- ; (ds1 3 (4 3 4))
171
- ; (ds1 2 (3 3 3))
172
- ; (ds1 1 (4 3 2))
173
- ; (ds1 0 (1 3 1))
174
- ; (ds1 done)
175
-
176
- (define (test-with-output-data-set )
177
- (define ds-input (mrs:create-data-set))
178
- (define ds-output (mrs:create-output-data-set))
179
- (mrs:map
180
- (lambda (key value )
181
- (mrs:emit key (* 10 value)))
182
- ds-input
183
- ds-output)
184
- (mrs:feed-value-list ds-input ' (1 2 3 4 )))
185
- (mrs:run-computation test-with-output-data-set)
186
- ; ;; Note that this returns directly!
187
- ; -> ((1 20) (0 10) (3 40) (2 30))
188
- |#
22
+
0 commit comments