Spaces:
Build error
Build error
Xianbao QIAN
commited on
Commit
·
2ea1dfc
1
Parent(s):
913402a
show derived model count
Browse files- .gitignore +3 -0
- bun.lockb +0 -0
- package.json +3 -2
- src/app/page.tsx +71 -36
.gitignore
CHANGED
|
@@ -34,3 +34,6 @@ yarn-error.log*
|
|
| 34 |
# typescript
|
| 35 |
*.tsbuildinfo
|
| 36 |
next-env.d.ts
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
# typescript
|
| 35 |
*.tsbuildinfo
|
| 36 |
next-env.d.ts
|
| 37 |
+
|
| 38 |
+
# DuckDB temp files.
|
| 39 |
+
.tmp
|
bun.lockb
CHANGED
|
Binary files a/bun.lockb and b/bun.lockb differ
|
|
|
package.json
CHANGED
|
@@ -9,9 +9,10 @@
|
|
| 9 |
"lint": "next lint"
|
| 10 |
},
|
| 11 |
"dependencies": {
|
|
|
|
|
|
|
| 12 |
"react": "^18",
|
| 13 |
-
"react-dom": "^18"
|
| 14 |
-
"next": "14.2.15"
|
| 15 |
},
|
| 16 |
"devDependencies": {
|
| 17 |
"typescript": "^5",
|
|
|
|
| 9 |
"lint": "next lint"
|
| 10 |
},
|
| 11 |
"dependencies": {
|
| 12 |
+
"next": "14.2.15",
|
| 13 |
+
"parquetjs-lite": "^0.8.7",
|
| 14 |
"react": "^18",
|
| 15 |
+
"react-dom": "^18"
|
|
|
|
| 16 |
},
|
| 17 |
"devDependencies": {
|
| 18 |
"typescript": "^5",
|
src/app/page.tsx
CHANGED
|
@@ -1,45 +1,80 @@
|
|
| 1 |
import fs from 'fs';
|
| 2 |
import path from 'path';
|
|
|
|
| 3 |
|
| 4 |
-
type
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
type Data = {
|
| 11 |
-
title: string;
|
| 12 |
-
description: string;
|
| 13 |
-
data: DataItem[];
|
| 14 |
};
|
| 15 |
|
| 16 |
export default async function Home() {
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
-
|
| 23 |
-
<main className="container mx-auto py-8 text-gray-900 dark:text-white">
|
| 24 |
-
<h1 className="text-4xl font-bold mb-4">{data.title}</h1>
|
| 25 |
-
<p className="text-xl mb-8">{data.description}</p>
|
| 26 |
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
}
|
|
|
|
| 1 |
import fs from 'fs';
|
| 2 |
import path from 'path';
|
| 3 |
+
import { ParquetReader } from 'parquetjs-lite';
|
| 4 |
|
| 5 |
+
type ModelData = {
|
| 6 |
+
ancestor: string;
|
| 7 |
+
direct_children: string[] | null;
|
| 8 |
+
all_children: string[];
|
| 9 |
+
all_children_count: number;
|
| 10 |
+
direct_children_count: number | null;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
};
|
| 12 |
|
| 13 |
export default async function Home() {
|
| 14 |
+
try {
|
| 15 |
+
// Read the Parquet file using parquetjs-lite
|
| 16 |
+
const parquetFilePath = path.join(process.cwd(), 'tables', 'ancestor_children.parquet');
|
| 17 |
+
const reader = await ParquetReader.openFile(parquetFilePath);
|
| 18 |
+
const cursor = reader.getCursor();
|
| 19 |
+
|
| 20 |
+
// Read all rows and convert to a JavaScript array
|
| 21 |
+
const data: ModelData[] = [];
|
| 22 |
+
let row = null;
|
| 23 |
+
while (row = await cursor.next()) {
|
| 24 |
+
data.push({
|
| 25 |
+
ancestor: row.ancestor,
|
| 26 |
+
direct_children: row.direct_children,
|
| 27 |
+
all_children: row.all_children,
|
| 28 |
+
all_children_count: row.all_children_count,
|
| 29 |
+
direct_children_count: row.direct_children_count,
|
| 30 |
+
});
|
| 31 |
+
// console.log(row.all_children.list.length)
|
| 32 |
+
}
|
| 33 |
+
await reader.close();
|
| 34 |
+
|
| 35 |
+
// console.log('Data:', data);
|
| 36 |
+
|
| 37 |
+
// Get the top 10 models with the most all_children
|
| 38 |
+
const top10Models = data
|
| 39 |
+
.sort((a, b) => b.all_children.length - a.all_children.length)
|
| 40 |
+
.slice(0, 10);
|
| 41 |
|
| 42 |
+
// console.log('Top 10 Models:', top10Models);
|
|
|
|
|
|
|
|
|
|
| 43 |
|
| 44 |
+
return (
|
| 45 |
+
<main className="container mx-auto py-8 text-gray-900 dark:text-white">
|
| 46 |
+
<h1 className="text-4xl font-bold mb-4">Top 10 Models with the Most All Children</h1>
|
| 47 |
+
{top10Models.length > 0 ? (
|
| 48 |
+
<table className="table-auto border-collapse w-full">
|
| 49 |
+
<thead>
|
| 50 |
+
<tr>
|
| 51 |
+
<th className="px-4 py-2 bg-gray-100 dark:bg-gray-800 text-left">Model</th>
|
| 52 |
+
<th className="px-4 py-2 bg-gray-100 dark:bg-gray-800 text-right">Direct Children</th>
|
| 53 |
+
<th className="px-4 py-2 bg-gray-100 dark:bg-gray-800 text-right">All Children</th>
|
| 54 |
+
</tr>
|
| 55 |
+
</thead>
|
| 56 |
+
<tbody>
|
| 57 |
+
{top10Models.map((model, index) => (
|
| 58 |
+
<tr key={index} className="border-t border-gray-200 dark:border-gray-700">
|
| 59 |
+
<td className="px-4 py-2">{model.ancestor}</td>
|
| 60 |
+
<td className="px-4 py-2 text-right">{model.direct_children_count ?? 0}</td>
|
| 61 |
+
<td className="px-4 py-2 text-right">{model.all_children_count}</td>
|
| 62 |
+
</tr>
|
| 63 |
+
))}
|
| 64 |
+
</tbody>
|
| 65 |
+
</table>
|
| 66 |
+
) : (
|
| 67 |
+
<p>No data found.</p>
|
| 68 |
+
)}
|
| 69 |
+
</main>
|
| 70 |
+
);
|
| 71 |
+
} catch (error) {
|
| 72 |
+
console.error('Error:', error);
|
| 73 |
+
return (
|
| 74 |
+
<main className="container mx-auto py-8 text-gray-900 dark:text-white">
|
| 75 |
+
<h1 className="text-4xl font-bold mb-4">Error</h1>
|
| 76 |
+
<p>An error occurred while processing the data: {error.message}</p>
|
| 77 |
+
</main>
|
| 78 |
+
);
|
| 79 |
+
}
|
| 80 |
}
|