13
13
(callback
14
14
(ds-elt-key ds-elt)
15
15
(ds-elt-value ds-elt)))))))
16
+ (clear-data-sets)
16
17
(thunk)
17
18
(flush-input-data-sets)
18
19
(let lp ()
32
33
output-value)))
33
34
34
35
#|
35
- (define (test1 )
36
+ (define (test-print-streaming )
36
37
(define ds-input (mrs:create-data-set))
37
38
(define ds1 (mrs:create-data-set))
38
39
(mrs:print-streaming ds-input 'ds1 )
39
40
(mrs:feed-value-list ds-input ' (1 2 3 4 )))
40
- (mrs:run-computation test1 )
41
+ (mrs:run-computation test-print-streaming )
41
42
; -> (ds1 0 1)
42
43
; (ds1 1 2)
43
44
; (ds1 2 3)
44
45
; (ds1 3 4)
45
46
; (ds1 done)
46
47
47
- (define (test2 )
48
+ (define (test-basic-map ) )
48
49
(define ds-input (mrs:create-data-set))
49
50
(define ds1 (mrs:create-data-set))
50
51
(mrs:map
54
55
ds1)
55
56
(mrs:print-streaming ds1 'ds1 )
56
57
(mrs:feed-value-list ds-input ' (1 2 3 4 )))
57
- (mrs:run-computation test2 )
58
+ (mrs:run-computation test-basic-map )
58
59
; (ds1 3 40)
59
60
; (ds1 0 10)
60
61
; (ds1 1 20)
61
62
; (ds1 2 30)
62
63
; (ds1 done)
63
64
64
- (define (test3 )
65
+ (define (test-chain-of-maps )
65
66
(define ds-input (mrs:create-data-set))
66
67
(define ds1 (mrs:create-data-set))
67
68
(mrs:map
76
77
ds1)
77
78
(mrs:print-streaming ds1 'ds1 )
78
79
(mrs:feed-value-list ds-input ' (1 2 3 4 )))
79
- (mrs:run-computation test3 )
80
+ (mrs:run-computation test-chain-of-maps )
80
81
; (ds1 1 20)
81
82
; (ds1 2 30)
82
83
; (ds1 3 40)
87
88
; (ds1 0 11)
88
89
; (ds1 done)
89
90
90
- (define (test4 )
91
+ (define (test-aggregate )
91
92
(define ds-input (mrs:create-data-set))
92
93
(define ds1 (mrs:create-data-set))
93
94
(mrs:aggregate
97
98
(mrs:feed-value-list ds-input ' (1 2 3 4 ))
98
99
(mrs:feed-value-list ds-input ' (3 3 3 3 ))
99
100
(mrs:feed-value-list ds-input ' (1 4 3 4 )))
100
- (mrs:run-computation test4 )
101
+ (mrs:run-computation test-aggregate )
101
102
; (ds1 3 (4 3 4))
102
103
; (ds1 2 (3 3 3))
103
104
; (ds1 1 (4 3 2))
104
105
; (ds1 0 (1 3 1))
105
106
; (ds1 done)
106
107
107
- (define (test5 )
108
+ (define (test-map-reduce )
108
109
(define ds-input (mrs:create-data-set))
109
110
(define ds1 (mrs:create-data-set))
110
111
(define ds2 (mrs:create-data-set))
123
124
(mrs:feed-value-list ds-input ' (1 1 3 5 ))
124
125
(mrs:feed-value-list ds-input ' (2 2 1 4 ))
125
126
(mrs:feed-value-list ds-input ' (3 1 0 3 )))
126
- (mrs:run-computation test5 )
127
+ (mrs:run-computation test-map-reduce )
127
128
; (ds1 3 50)
128
129
; (ds1 0 20)
129
130
; (ds1 0 10)
161
162
(mrs:feed-value-list ds-input ' (1 2 3 4 )))
162
163
(mrs:run-computation test-with-output-data-set)
163
164
; ;; Note that this returns directly!
164
- ; -> ((1 20) (0 10) (3 40) (2 30))
165
+ ; Value -> ((1 20) (0 10) (3 40) (2 30))
166
+
167
+ (define (test-with-user-specified-callback )
168
+ (define ds-input (mrs:create-data-set))
169
+ (define ds-output (mrs:create-output-data-set))
170
+ (mrs:map
171
+ (lambda (key value )
172
+ (mrs:emit key (* 10 value)))
173
+ ds-input
174
+ ds-output)
175
+ (mrs:feed-value-list ds-input ' (1 2 3 4 )))
176
+ (mrs:run-computation-with-callback
177
+ test-with-user-specified-callback
178
+ (lambda (k v )
179
+ (pp (list 'user k v))))
180
+ ; ;; Printed:
181
+ ; (user 1 20)
182
+ ; (user 2 30)
183
+ ; (user 3 40)
184
+ ; (user 0 10)
185
+
186
+ (define (test-multiple-writers-to-output )
187
+ (define ds-input (mrs:create-data-set))
188
+ (define ds-output (mrs:create-output-data-set))
189
+ (mrs:map
190
+ (lambda (key value )
191
+ (mrs:emit key (* 10 value)))
192
+ ds-input
193
+ ds-output)
194
+ (mrs:map
195
+ (lambda (key value )
196
+ (mrs:emit key (* 11 value)))
197
+ ds-input
198
+ ds-output)
199
+ (mrs:feed-value-list ds-input ' (1 2 3 4 )))
200
+ (mrs:run-computation test-multiple-writers-to-output)
201
+ ; ;; Note that this returns directly!
202
+ ; Value -> ((3 44) (2 33) (1 22) (0 11) (0 10) (3 40) (2 30) (1 20))
203
+
204
+ (define (test-file-writer-output-no-dependency )
205
+ (define ds-file-input (mrs:create-data-set))
206
+ (define ds-file-output (mrs:create-file-writer-data-set " output.txt" ))
207
+ (define ds-main-input (mrs:create-data-set))
208
+ (define ds-main-output (mrs:create-output-data-set))
209
+ (mrs:map
210
+ (lambda (key value )
211
+ (pp 'file-map )
212
+ (conspire:thread-yield)
213
+ (pp 'emit )
214
+ (mrs:emit key (* 10 value)))
215
+ ds-file-input
216
+ ds-file-output)
217
+ (mrs:map
218
+ (lambda (key value )
219
+ (pp 'main-map )
220
+ (mrs:emit key (* 11 value)))
221
+ ds-main-input
222
+ ds-main-output)
223
+ (mrs:feed-value-list ds-main-input ' (1 2 3 ))
224
+ (mrs:feed-value-list ds-file-input ' (1 2 3 4 5 6 7 8 9 10 11 12 )))
225
+ (mrs:run-computation test-file-writer-output-no-dependency)
226
+
227
+ ; ;; Returned
228
+ ; Value 40: ((0 11) (2 33) (1 22))
229
+
230
+ ; ;; BUT the file output.txt is empty! This is because the main
231
+ ; ;; dataflow finished and returned before the file writing was
232
+ ; ;; finished. We can fix that by making the done of the main dataflow
233
+ ; ;; depend on the completion of the others:
234
+
235
+
236
+ (define (test-file-writer-output-with-dependency )
237
+ (define ds-file-input (mrs:create-data-set))
238
+ (define ds-file-output (mrs:create-file-writer-data-set " output.txt" ))
239
+ (define ds-main-input (mrs:create-data-set))
240
+ (define ds-main-output (mrs:create-output-data-set))
241
+ (mrs:map
242
+ (lambda (key value )
243
+ (conspire:thread-yield)
244
+ (mrs:emit key (* 10 value)))
245
+ ds-file-input
246
+ ds-file-output)
247
+ (mrs:map
248
+ (lambda (key value )
249
+ (mrs:emit key (* 11 value)))
250
+ ds-main-input
251
+ ds-main-output)
252
+ (mrs:depends-on
253
+ ds-file-output
254
+ ds-main-output)
255
+ (mrs:feed-value-list ds-main-input ' (1 2 3 ))
256
+ (mrs:feed-value-list ds-file-input ' (1 2 3 4 5 6 7 8 9 10 11 12 )))
257
+ (mrs:run-computation test-file-writer-output-with-dependency)
258
+ ; Value 28: ((0 11) (2 33) (1 22))
259
+ ; ; Value is returned to the REPL
260
+
261
+ ; ; And, unlike the test case above, the "output.txt" file contains all
262
+ ; ; 12 key-value pairs:
263
+ ; (2 30)
264
+ ; (3 40)
265
+ ; (4 50)
266
+ ; (0 10)
267
+ ; (1 20)
268
+ ; (6 70)
269
+ ; (7 80)
270
+ ; (8 90)
271
+ ; (9 100)
272
+ ; (5 60)
273
+ ; (11 120)
274
+ ; (10 110)
275
+
276
+
277
+ (define (test-large-data-fact )
278
+ (define ds-fib-input (mrs:create-data-set))
279
+ (define ds-fib-output (mrs:create-file-writer-data-set " output.txt" ))
280
+ (mrs:map
281
+ (lambda (key value )
282
+ (mrs:emit key (fact value)))
283
+ ds-fib-input
284
+ ds-fib-output)
285
+ (mrs:feed-value-list ds-fib-input (make-range 500 )))
286
+ (mrs:run-computation test-large-data-fact)
287
+
288
+ ; ;; Works! The output file has the first 500 factorials. They are not
289
+ ; ;; in strictly increasing ordering, demonstrating that they are
290
+ ; ;; indeed being distributed across our workers.
291
+
165
292
|#
0 commit comments