54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
#!/usr/bin/env node
|
|
// Scenario 2: Deep Dive Analysis (Large Arrow Table)
|
|
// Tests large Arrow tables (> 1MB) sent via HTTP fileserver
|
|
|
|
const { SmartSend } = require('../js_bridge');
|
|
|
|
// Configuration
|
|
const ANALYSIS_SUBJECT = "analysis_results";
|
|
const NATS_URL = "nats://localhost:4222";
|
|
|
|
// Create correlation ID for tracing
|
|
const correlationId = require('uuid').v4();
|
|
|
|
// Sender: Send large Arrow table to Julia
|
|
async function sendLargeTable() {
|
|
// Create a large DataFrame-like structure (10 million rows)
|
|
// For testing, we'll create a smaller but still large table
|
|
const numRows = 1000000; // 1 million rows
|
|
|
|
const data = {
|
|
id: Array.from({ length: numRows }, (_, i) => i + 1),
|
|
value: Array.from({ length: numRows }, () => Math.random()),
|
|
category: Array.from({ length: numRows }, () => ['A', 'B', 'C'][Math.floor(Math.random() * 3)])
|
|
};
|
|
|
|
// Convert to Arrow Table
|
|
const { Table, Vector, RecordBatch } = require('apache-arrow');
|
|
|
|
const idVector = Vector.from(data.id);
|
|
const valueVector = Vector.from(data.value);
|
|
const categoryVector = Vector.from(data.category);
|
|
|
|
const table = Table.from({
|
|
id: idVector,
|
|
value: valueVector,
|
|
category: categoryVector
|
|
});
|
|
|
|
// Send via SmartSend with type="table"
|
|
const env = await SmartSend(
|
|
ANALYSIS_SUBJECT,
|
|
table,
|
|
"table",
|
|
{ correlationId }
|
|
);
|
|
|
|
console.log(`Sent large table with ${numRows} rows`);
|
|
console.log(`Correlation ID: ${correlationId}`);
|
|
console.log(`Transport: ${env.transport}`);
|
|
console.log(`URL: ${env.url || 'N/A'}`);
|
|
}
|
|
|
|
// Run the sender
|
|
sendLargeTable().catch(console.error); |