Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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.util.List[String]的函数创建使用ArrayType(StringType)列的UDF?_Java_Scala_Dataframe_Apache Spark_User Defined Functions - Fatal编程技术网

序列化错误:如何使用使用java.util.List[String]的函数创建使用ArrayType(StringType)列的UDF?

序列化错误:如何使用使用java.util.List[String]的函数创建使用ArrayType(StringType)列的UDF?,java,scala,dataframe,apache-spark,user-defined-functions,Java,Scala,Dataframe,Apache Spark,User Defined Functions,我有一个带有模式的数据框架: df.printSchema() root |-- _1: integer (nullable = false) |-- _2: array (nullable = true) | |-- element: string (containsNull = true) 内容是这样的 df.show(1) +---+--------------------+ | _1| _2| +---+------------------

我有一个带有模式的数据框架:

df.printSchema()
root
 |-- _1: integer (nullable = false)
 |-- _2: array (nullable = true)
 |    |-- element: string (containsNull = true)
内容是这样的

df.show(1)
+---+--------------------+
| _1|                  _2|
+---+--------------------+
|  1|[863e3434fffffff,...|
+---+--------------------+
我想添加另一个名为“compressed”的列,其类型为array[string],它将使用UDF存储下面的函数结果。该函数接受一个Java列表作为输入Java.util.List[String],并输出一个Java列表——但我有一个函数输出到Scala数组,如下所示:

def compactf(s: java.util.List[String])  = { H3.instance.compactAddress(s).asScala.toArray }
该函数的工作方式与我预期的一样,返回一个Scala数组

compactf(my_test_java_list)
res48: Array[String] = Array(863e3434fffffff, 863e3435fffffff, 863e3092fffffff, 863e3090fffffff, 863e30ba7ffffff, 863e30bafffffff, 863e356b7ffffff, 863e356a7ffffff, 863e350d7ffffff, 863e350f7ffffff, 863e35c5fffffff, 863e35c57ffffff, 863e35d8fffffff, 863e35d9fffffff, 863e3436fffffff, 863e34347ffffff, 863e34357ffffff, 863e342afffffff, 863e3428fffffff, 863e30927ffffff, 863e30907ffffff, 863e3091fffffff, 863e308e7ffffff, 863e308efffffff, 863e30bb7ffffff, 863e30b87ffffff, 863e30b8fffffff, 863e30a77ffffff, 863e30a67ffffff, 863e35697ffffff, 863e35687ffffff, 863e356afffffff, 863e35757ffffff, 863e35777ffffff, 863e350dfffffff, 863e350c7ffffff, 863e350e7ffffff, 863e3511fffffff, 863e35117ffffff, 863e35c4fffffff)
然而,当我试图将其合并到udf(如下)中时,它不起作用。例如,此操作失败并出现序列化错误(任务不可序列化):

我想要的是:

+---+--------------------+--------------------+
| _1|                  _2|           compacted|
+---+--------------------+--------------------+
|  1|[863e3434fffffff,...|[863e3092fffffff,...|
+---+--------------------+--------------------+

感谢任何指点

H3.instance.compactAddress中的内容是什么?它是否使用了一些不可序列化的类?如果您在stacktrace中进一步查看,您应该会发现哪个字段不可序列化的提示谢谢@grisha weintraub和@raphael roth。我使用的是uber的[h3库][(java绑定)。我使用的方法(compactAddress)将java字符串列表作为输入,并返回java字符串列表作为输出。如果我查看stacktrace,我会看到:
java.io.NotSerializableException:com.uber.h3core.h3core序列化堆栈:-对象不可序列化(类别:com.uber.h3core.h3core,价值:com.uber.h3core。H3Core@68ce10f4)-字段(类:H3$,名称:实例,类型:class com.uber.h3core.h3core)-对象(类H3$,H3$@6b1c1211)
+---+--------------------+--------------------+
| _1|                  _2|           compacted|
+---+--------------------+--------------------+
|  1|[863e3434fffffff,...|[863e3092fffffff,...|
+---+--------------------+--------------------+