当前位置: 首页 > 知识库问答 >
问题:

火花数据帧列在jooq选择查询

申光临
2023-03-14

我使用rdd读取csv文件,只从dataframe中获取一列,并使用scala toArray将其转换为数组。

之后,我在sql中使用这个数组来检查这个数组中是否有一个字段值。

我使用Postgresql和jooq 3.11,但无论我怎么努力,我不能呈现sql,因为它需要。

下面的代码是数组[String]。但是,它不会生成sql。我在用inline()DSL试验这个问题时遇到了这些错误。数组,以及()中的相同问题的版本:

无法解释类型为org的参数。约克。impl。QuantifiedSelectImpl作为字段类型的类组织。约克。impl。方言中不支持数组默认运算符不存在:character variating=character variating[]提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换

val ast = select(columns:_*).from(tableName).where(field("y").equal(inline(y))).and(field("x").equal(any(x))).asTable("t")

如何使用Array[String]比较我的列值是否在这个数组中。


共有1个答案

端木高卓
2023-03-14

通常建议使用jOOQ代码生成器,因为它为您完成以下工作,而不是您一直在想这个问题。

在许多情况下,jOOQ需要知道字段的正确数据类型

java prettyprint-override">field("y", SQLDataType.VARCHAR)
field("x", SQLDataType.VARCHAR)

如果您不提供数据类型,jOOQ将简单地推断SQLDataType. OBJECT,它对应于JDBC中的类型。其他java.lang.Object。因此,它不知道如何绑定数组,Java(和Scala)中的一些类型推断问题甚至可能导致选择错误的重载,例如在Field.equal()重载中。在您的案例中,选择了Field.equal(T),但您希望Field.equal(QuantifiedSelect)

 类似资料:
  • 我正在尝试使用Apache Spark,以便将具有多个连接和子选择的(大型)SQL查询的结果加载到来自Spark的DataFrame中,如从SQL查询创建Spark Dataframe中所述。 不幸的是,我这样做的尝试导致了拼花错误: 线程“main”组织中出现异常。阿帕奇。火花sql。AnalysisException:无法推断拼花地板的架构。必须手动指定。 我从谷歌看到的信息表明,当数据帧为空

  • 并将其应用于数据表的一列--这是我希望这样做的: 我还没有找到任何简单的方法,正在努力找出如何做到这一点。一定有一个更简单的方法,比将数据rame转换为和RDD,然后从RDD中选择行来获得正确的字段,并将函数映射到所有的值,是吗?创建一个SQL表,然后用一个sparkSQL UDF来完成这个任务,这更简洁吗?

  • 我想过滤掉具有“c2”列前3个字符的记录,无论是“MSL”还是“HCP”。 所以输出应该如下所示。 有谁能帮忙吗? 我知道df。过滤器($c2.rlike(“MSL”))--用于选择记录,但如何排除记录? 版本:Spark 1.6.2 Scala:2.10

  • 在PySpark中或者至少在Scala中,Apache Spark中是否有与Pandas Melt函数等价的函数? 到目前为止,我一直在用Python运行一个示例数据集,现在我想对整个数据集使用Spark。

  • [新加入Spark]语言-Scala 根据文档,RangePartitioner对元素进行排序并将其划分为块,然后将块分发到不同的机器。下面的例子说明了它是如何工作的。 假设我们有一个数据框,有两列,一列(比如“a”)的连续值从1到1000。还有另一个数据帧具有相同的模式,但对应的列只有4个值30、250、500、900。(可以是任意值,从1到1000中随机选择) 如果我使用RangePartit

  • 如何使用Spark-Scala连接日期和时间列(两个字符串)