Java Mongo Spark连接器:MongoTypeConversionException无法将日期\时间强制转换为NullType
我试图从mongo源代码中读取数据,并对其应用一些转换。但当我尝试应用任何转换或甚至进行df.count时。我得到以下错误Java Mongo Spark连接器:MongoTypeConversionException无法将日期\时间强制转换为NullType,java,mongodb,apache-spark,apache-spark-sql,Java,Mongodb,Apache Spark,Apache Spark Sql,我试图从mongo源代码中读取数据,并对其应用一些转换。但当我尝试应用任何转换或甚至进行df.count时。我得到以下错误 MongoTypeConversionException: Cannot cast DATE_TIME into a NullType 因此,我理解列具有混合数据类型,在本例中为NULL和TIMESTAMP。我使用的是mongo-spark-connector_2.11版本2.2.1,它说ConflictTypes有一个基类型作为StringType 因此,一种解决方法是
MongoTypeConversionException: Cannot cast DATE_TIME into a NullType
因此,我理解列具有混合数据类型,在本例中为NULL和TIMESTAMP。我使用的是mongo-spark-connector_2.11版本2.2.1,它说ConflictTypes有一个基类型作为StringType
因此,一种解决方法是传递模式、列名和类型,以便连接器不会自行推断类型。但是如何传递模式呢
下面是我从mongo读取的Java代码
DataFrameReader x = ss.read().format("com.mongodb.spark.sql.DefaultSource").options("spark.mongodb.input.uri", "<mongo_uri>");
Dataset<Row> = x.load();
ss是SparkSession对象。请导入Java SQL日期,它将解决此问题
import java.sql.Date;
//import java.util.Date;
错误类型:
Caused by: com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast DATE_TIME into a StructType(StructField(date,IntegerType,false), S
请导入Java SQL日期,它将解决此问题
import java.sql.Date;
//import java.util.Date;
错误类型:
Caused by: com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast DATE_TIME into a StructType(StructField(date,IntegerType,false), S
MongoDB Connector for Spark默认使用每个字段的1000个样本来构建其架构,因此,如果一个字段包含不同的数据类型,例如Null数据类型和datetime数据类型,并且MongoDB Connector for Spark可能不会对datetime数据进行采样,并将该字段作为Null数据类型。至少,当您使用count方法时,连接器将尝试从mongodb加载数据以指定spark dataframe中的数据类型,并导致此错误:MongoTypeConversionException无法将日期\ U时间强制转换为NullType 解决方案: 添加MongoDB Connector for Spark的示例数据,以构建正确的模式。例如,在pyspark中:
df = session.read.format("com.mongodb.spark.sql.DefaultSource").option('sampleSize', 50000).load()
MongoDB Connector for Spark默认使用每个字段的1000个样本来构建其架构,因此,如果一个字段包含不同的数据类型,例如Null数据类型和datetime数据类型,并且MongoDB Connector for Spark可能不会对datetime数据进行采样,并将该字段作为Null数据类型。至少,当您使用count方法时,连接器将尝试从mongodb加载数据以指定spark dataframe中的数据类型,并导致此错误:MongoTypeConversionException无法将日期\ U时间强制转换为NullType 解决方案: 添加MongoDB Connector for Spark的示例数据,以构建正确的模式。例如,在pyspark中:
df = session.read.format("com.mongodb.spark.sql.DefaultSource").option('sampleSize', 50000).load()
我使用import java.sql.Timestamp作为我的mongo字段的时间戳,一切正常。我使用import java.sql.Timestamp作为我的mongo字段的时间戳,一切正常。你能解释一下增加样本号如何解决这个问题吗?您是否仍在读取空字段?@Ted增加样本将显著增加Spark构建正确模式的可能性。如果Spark知道一个字段包含不同的数据类型,如Null数据类型和datetime数据类型,它将在dataframe中为该字段构建一个合适的列类型,如string。这应该标记为正确答案。您能否解释增加示例数将如何解决此问题?您是否仍在读取空字段?@Ted增加样本将显著增加Spark构建正确模式的可能性。如果Spark知道一个字段包含不同的数据类型,如Null数据类型和datetime数据类型,它将为dataframe中的该字段构建合适的列类型,如string。这应标记为正确答案。