Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中Spark SQL中Column.getItem()中的Column参数_Java_Apache Spark_Apache Spark Sql - Fatal编程技术网

Java中Spark SQL中Column.getItem()中的Column参数

Java中Spark SQL中Column.getItem()中的Column参数,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,使用Spark SQL的Java API,是否可以以某种方式将列对象或类似的复杂表达式传递给列的getItem()方法? 例如,如果我有一个大小为n的数组列,并且我想访问索引为n/2的项,那么当前是否有一种优雅的方法来执行此操作?当然,我可以为此编写一个UDF,但这是一个非常丑陋的解决方案 当前,如果将列对象传递给getItem(),代码将进行编译(因为它接受对象参数),但会在运行时引发异常。您使用的spark版本是什么?v2.1及更高版本中有posexplode,您可以通过一些逻辑来实现这一点

使用Spark SQL的Java API,是否可以以某种方式将列对象或类似的复杂表达式传递给列的getItem()方法? 例如,如果我有一个大小为n的数组列,并且我想访问索引为n/2的项,那么当前是否有一种优雅的方法来执行此操作?当然,我可以为此编写一个UDF,但这是一个非常丑陋的解决方案


当前,如果将列对象传递给getItem(),代码将进行编译(因为它接受对象参数),但会在运行时引发异常。

您使用的spark版本是什么?v2.1及更高版本中有
posexplode
,您可以通过一些逻辑来实现这一点。请参阅相关的pyspark问题。使用posexplode不是有点过分吗?这似乎也是相对低效的。我最终解决了这个问题(这个问题已经有一年了)是编写一个UDFI,通常会尝试避免UDF,因为这样可以避免对python的序列化,但在这种情况下,我不确定什么更有效,特别是因为您使用的是java。但是,您应该能够使用
expr
方法-我认为这将比udf更好。