diff options
Diffstat (limited to 'src/arrow/js/perf/config.ts')
-rw-r--r-- | src/arrow/js/perf/config.ts | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/arrow/js/perf/config.ts b/src/arrow/js/perf/config.ts new file mode 100644 index 000000000..08ea9ecc1 --- /dev/null +++ b/src/arrow/js/perf/config.ts @@ -0,0 +1,76 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import * as Arrow from '../src/Arrow.dom'; + +// from https://stackoverflow.com/a/19303725/214950 +let seed = 1; +function random() { + const x = Math.sin(seed++) * 10000; + return x - Math.floor(x); +} + +console.time('Prepare Data'); + +const LENGTH = 100000; +const NUM_BATCHES = 10; + +const values = Arrow.Utf8Vector.from(['Charlottesville', 'New York', 'San Francisco', 'Seattle', 'Terre Haute', 'Washington, DC']); + +const batches = Array.from({length: NUM_BATCHES}).map(() => { + const lat = Float32Array.from( + { length: LENGTH }, + () => ((random() - 0.5) * 2 * 90)); + const lng = Float32Array.from( + { length: LENGTH }, + () => ((random() - 0.5) * 2 * 90)); + + const origin = Uint8Array.from( + { length: LENGTH }, + () => (random() * 6)); + const destination = Uint8Array.from( + { length: LENGTH }, + () => (random() * 6)); + + const originType = new Arrow.Dictionary(values.type, new Arrow.Int8, 0, false); + const destinationType = new Arrow.Dictionary(values.type, new Arrow.Int8, 0, false); + + return Arrow.RecordBatch.new({ + 'lat': Arrow.Float32Vector.from(lat), + 'lng': Arrow.Float32Vector.from(lng), + 'origin': Arrow.Vector.new(Arrow.Data.Dictionary(originType, 0, origin.length, 0, null, origin, values)), + 'destination': Arrow.Vector.new(Arrow.Data.Dictionary(destinationType, 0, destination.length, 0, null, destination, values)), + }); +}); + +const tracks = new Arrow.DataFrame(batches[0].schema, batches); + +console.timeEnd('Prepare Data'); + +export default [ + { + name: 'tracks', + df: tracks, + ipc: tracks.serialize(), + countBys: ['origin', 'destination'], + counts: [ + {column: 'lat', test: 'gt' as 'gt' | 'eq', value: 0 }, + {column: 'lng', test: 'gt' as 'gt' | 'eq', value: 0 }, + {column: 'origin', test: 'eq' as 'gt' | 'eq', value: 'Seattle'}, + ], + } +]; |