Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Scala 如何从csv读取Spark SQL UserDefinedType_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala 如何从csv读取Spark SQL UserDefinedType

Scala 如何从csv读取Spark SQL UserDefinedType,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我正在尝试基于字符串定义UserDefinedType,但与Spark 2.4.1中的StringType不同,但看起来Spark中存在错误,或者我的smth操作不正确 我将我的类型定义如下: class MyType扩展了UserDefinedType[MyValue]{ 覆盖def sqlType:DataType=StringType ... } @SQLUserDefinedType(udt=classOf[MyType]) 案例类MyValue 我希望它被读取并存储为字符串,只使用一

我正在尝试基于字符串定义UserDefinedType,但与Spark 2.4.1中的StringType不同,但看起来Spark中存在错误,或者我的smth操作不正确

我将我的类型定义如下:

class MyType扩展了UserDefinedType[MyValue]{
覆盖def sqlType:DataType=StringType
...
}
@SQLUserDefinedType(udt=classOf[MyType])
案例类MyValue
我希望它被读取并存储为字符串,只使用一个自定义SQL类型。事实上,Spark根本无法读取字符串:

java.lang.ClassCastException: org.apache.spark.sql.execution.datasources.csv.UnivocityParser$$anonfun$makeConverter$11 cannot be cast to org.apache.spark.unsafe.types.UTF8String
    at org.apache.spark.sql.catalyst.expressions.BaseGenericInternalRow$class.getUTF8String(rows.scala:46)
    at org.apache.spark.sql.catalyst.expressions.GenericInternalRow.getUTF8String(rows.scala:195)
    at org.apache.spark.sql.catalyst.expressions.JoinedRow.getUTF8String(JoinedRow.scala:102)


我认为问题出在UnivocityParser.makeConverter上,它不返回(String=>Any)函数,但在UDT的情况下返回(String=>(String=>Any)),看起来它确实是Spark中的一个bug。我查看了Spark 2.4.1的来源,发现了以下内容:

case-udt:UserDefinedType[\u]=>(数据:字符串)=>
makeConverter(名称、udt.sqlType、可空、选项)
将此更改为

case-udt:UserDefinedType[\u]=>
makeConverter(名称、udt.sqlType、可空、选项)
解决了我的问题。为Spark提出了一个问题: