{"id":36419902,"url":"https://github.com/audienceproject/crossbow","last_synced_at":"2026-01-11T17:05:32.239Z","repository":{"id":54697337,"uuid":"286484429","full_name":"audienceproject/crossbow","owner":"audienceproject","description":"Single node, in-memory DataFrame analytics library.","archived":false,"fork":false,"pushed_at":"2025-09-15T13:23:40.000Z","size":136,"stargazers_count":42,"open_issues_count":1,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-09-15T15:21:40.822Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/audienceproject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-08-10T13:34:43.000Z","updated_at":"2025-09-15T13:23:44.000Z","dependencies_parsed_at":"2025-09-17T14:01:17.840Z","dependency_job_id":null,"html_url":"https://github.com/audienceproject/crossbow","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/audienceproject/crossbow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audienceproject%2Fcrossbow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audienceproject%2Fcrossbow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audienceproject%2Fcrossbow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audienceproject%2Fcrossbow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/audienceproject","download_url":"https://codeload.github.com/audienceproject/crossbow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audienceproject%2Fcrossbow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28314264,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-11T17:05:31.687Z","updated_at":"2026-01-11T17:05:32.219Z","avatar_url":"https://github.com/audienceproject.png","language":"Scala","funding_links":[],"categories":["数据科学"],"sub_categories":["语音合成"],"readme":"# Crossbow\n\nSingle node, in-memory DataFrame analytics library.\n\n* Pure Scala; 0 dependencies\n* Specialized operations on primitive types\n* Fluent expression DSL\n* Immutable public API; `Array` under the hood\n\n## News\n\n* 2024-03-22: Upgraded to Scala 3 with version `0.2.0`. Some parts of the source code have been completely rewritten,\n  but the feature set remains the same. The intention is for Crossbow to be a Scala 3 library going forward.\n\n## Installing\n\nThe library is available through Maven Central.\n\nSBT style dependency: `\"com.audienceproject\" %% \"crossbow\" % \"latest\"`\n\n# API\n\n```scala 3\nimport com.audienceproject.crossbow.{*, given}\n\nval data = Seq((\"a\", 1), (\"b\", 2), (\"c\", 3))\nval df = DataFrame.fromSeq(data)\n\ndf.printSchema()\n\n/**\n * _0: string\n * _1: int\n */\n\ndf.as[(String, Int)].foreach(println)\n\n/**\n * (a, 1)\n * (b, 2)\n * (c, 3)\n */\n```\n\n## Transforming\n\n```scala 3\nval df = Seq((1, 2), (3, 4)).toDataFrame(\"x\", \"y\")\ndf.select($\"x\" + $\"y\" / 2d as \"avg\", ($\"x\", $\"y\") as \"tuple\")\n\n// Lambda functions\nval pythagoras = lambda[(Int, Int), Double]:\n  (a, b) =\u003e math.sqrt(a * a + b * b)\ndf.select(pythagoras($\"x\", $\"y\"))\n```\n\n## Filtering\n\n```scala 3\ndf.filter($\"x\" \u003e= 2 \u0026\u0026 $\"y\" % 2 =!= 0)\n```\n\n## Grouping\n\n```scala 3\nval df = Seq((\"foo\", 1), (\"foo\", 2), (\"bar\", 3)).toDataFrame(\"someKey\", \"x\")\ndf.groupBy($\"someKey\").agg(sum($\"x\") / count() as \"avg\", collect($\"x\") as \"xs\")\n\n// Custom aggregators\nval product = reducer[Int, Int](1)(_ * _)\ndf.groupBy($\"someKey\").agg(product($\"x\") as \"product\")\n```\n\n## Sorting\n\n```scala 3\ndf.sortBy($\"x\")\n\n// Sorting on 'x' first, then 'y'\ndf.sortBy(($\"someKey\", $\"x\"))\n\n// Sorting with explicit ordering (e.g. integer descending)\ndf.sortBy($\"x\")(using Order.by(Ordering.Int.reverse))\n```\n\n## Joining\n\n```scala 3\nval otherDf = Seq((\"foo\", 1, 10d), (\"foo\", 2, 20d), (\"bar\", 3, 30d)).toDataFrame(\"someKey\", \"x\", \"y\")\n\n// Inner join\ndf.join(otherDf, $\"someKey\")\n\n// Inner join on multiple columns\ndf.join(otherDf, ($\"someKey\", $\"x\"))\n\n// Other join types\ndf.join(otherDf, $\"someKey\", JoinType.LeftOuter)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faudienceproject%2Fcrossbow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faudienceproject%2Fcrossbow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faudienceproject%2Fcrossbow/lists"}