Python 错误Utils:中止任务java.lang.UnsupportedOperationException:PrimitiveType编码器:不支持的数据类型null

Python 错误Utils:中止任务java.lang.UnsupportedOperationException:PrimitiveType编码器:不支持的数据类型null,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我是Hbase的新手。我有一个数据帧要保存到Ambari中的HBase。错误消息为: 错误:正在中止任务 java.lang.UnsupportedOperationException:PrimitiveType编码器:不支持的数据类型null 我试图解决这个问题,现在数据帧中不再有空值,我仍然是相同的错误。有人能帮我吗 +--------------------+-------+---------+------+------+ | time|col1 |

我是Hbase的新手。我有一个数据帧要保存到Ambari中的HBase。错误消息为: 错误:正在中止任务 java.lang.UnsupportedOperationException:PrimitiveType编码器:不支持的数据类型null

我试图解决这个问题,现在数据帧中不再有空值,我仍然是相同的错误。有人能帮我吗

+--------------------+-------+---------+------+------+
|                time|col1    |    col2|  col3|  col4|
+--------------------+-------+---------+-------------+
|2020-04-12T01:30:...|+30003  |  532879| +1830| 20577|
|2020-04-11T18:15:...|+18838  |  521714| +1317| 20064|
+--------------------+--------+--------+------+------+
以下是我的参考代码:

from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.sql.session import SparkSession
from pyspark.sql import SQLContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
from pyspark.sql import *
from pyspark.sql.types import *
from pyspark.sql.functions import *
import json

def main():
    def g(x):
        for i in x.collect():
            schema = StructType({CODE FOR STRUCTTYPE})
            df1 = spark.createDataFrame(i,schema = schema)
            df2=df1.select(col("time"),col("col1"),col("col2"),col("col3"),col("col4"))
            df3=df2.fillna({'col3':'0'})
            data_source_format = "org.apache.spark.sql.execution.datasources.hbase"
            catalog =''.join("""{"table":\
            {"namespace":"default","name":"data"},"rowkey":"key","columns":{"time":\ 
            {"cf":"rowkey","col":"key","type":"string"},{three other cols}}""".split())
            df3.write
             .options(catalog=catalog,newtable=5)
             .format(data_source_format)
             .save()
            spark.read.options(catalog=catalog).format(data_source_format).load()

    conf = SparkConf().setAppName("PySparkKafka").setMaster("local[2]")  
    sc = SparkContext(conf=conf)
    spark = SparkSession(sc)
    ssc = StreamingContext(sc, 10)
    topic =['api-spark1']
    kafkaStream = KafkaUtils.createDirectStream(ssc,topic,{"metadata.broker.list": "sandbox-hdp.hortonworks.com:6667"})
    parsed = kafkaStream.map(lambda kv: json.loads(kv[1])['response'])
    parsed.foreachRDD(g)
    ssc.start()
    ssc.awaitTermination()

if __name__=='__main__':
    main()
这是错误消息:

20/04/12 01:59:57 ERROR Utils: Aborting task
java.lang.UnsupportedOperationException: PrimitiveType coder: unsupported data type null
    at org.apache.spark.sql.execution.datasources.hbase.types.PrimitiveType.toBytes(PrimitiveType.scala:61)

不支持的数据类型null
表示您正在使用的列中有一列的值为null。要解决这个问题,只需执行此
cast(null为int)


Spark标识数据类型,如字符串、int等,但不标识
null
类型。

不支持的数据类型null
表示您正在使用的列之一具有null值。要解决这个问题,只需执行此
cast(null为int)


Spark标识数据类型,如string、int等,但不标识
null
type。

数据帧中没有空值,我运行show()并进行了检查。另外,我将df3=df2.fillna({'col','0'})放在一起解析空值。我还将df3=df2.fillna({'col','0'})放在一起解析出空值。