Functional programming 与Java兼容的简单表达式语言

Functional programming 与Java兼容的简单表达式语言,functional-programming,expression,system-design,apache-calcite,jexl,Functional Programming,Expression,System Design,Apache Calcite,Jexl,我正在Scala中为特性工程构建一个系统,最终用户API接收对象/事件列表上的聚合。 例如,此工具的客户端可能会向其传递一个函数,该函数为特定web用户提供过去的页面浏览量数组,筛选来自指定国家/地区的页面浏览量并对其进行计数。然后,该调用的输出将是一个数字 它可以被认为是一个非常简单的reduce操作。 我正在研究如何为这样的系统构建API。我可以编写一个简单的自定义语言来执行计数和过滤,但我确信这不是最好的方法,特别是因为除非精心设计,否则它的表达力不够 你知道类似于表达式语言的东西吗?它可

我正在Scala中为特性工程构建一个系统,最终用户API接收对象/事件列表上的聚合。 例如,此工具的客户端可能会向其传递一个函数,该函数为特定web用户提供过去的页面浏览量数组,筛选来自指定国家/地区的页面浏览量并对其进行计数。然后,该调用的输出将是一个数字

它可以被认为是一个非常简单的reduce操作。 我正在研究如何为这样的系统构建API。我可以编写一个简单的自定义语言来执行计数和过滤,但我确信这不是最好的方法,特别是因为除非精心设计,否则它的表达力不够

你知道类似于表达式语言的东西吗?它可以用来表达简单的函数,而不需要我从头开始构建一个函数? 另一个选项是允许最终用户将自定义代码传递到此库,这在运行时可能很危险


我知道ApacheCalcite可以将SQL插入到不同的数据结构和数据库中。这是一个很好的选择,但是它迫使我以“列式”sql方式思考,而在这里,我更多地寻找基于行的东西,类似于map reduce编程方式

您提到了ApacheCalcite,但您知道不必编写SQL就可以使用它吗?如果使用方解石类,可以直接构建代数,这与MapReduce的代数方法非常相似。有关更多详细信息,请参阅。

这正是我想要的!谢谢我在文档中没有发现方解石直接将字符串表达式转换为RelBuilder的示例。这是我应该实施的还是我遗漏了什么?其思想是从用户那里获得一个字符串表达式并执行它。您有几个选项。1.直接调用
RelBuilder
API(用Java或其他JVM语言)来构建表达式。2.设计自己的语言并编写解析器,将该语言中的查询转换为一系列
RelBuilder
调用。3.使用Calcite的
RelJson
类将JSON中表示的代数转换为代数Java对象。4.使用SQL作为查询语言,并使用Calcite的SQL解析器进行解析。所有这些方法都应该产生类似的结果:方解石代数对象树;区别在于源语言。