我不确定如何继续诊断这个问题,但这是我到目前为止所做的。
我用csv文件创建了一个数据帧(我在这个问题上别无选择,我更喜欢它也不是csv ...)
我这样摄取:
table = sqlContext.read \
.option('header','true') \
.option('inferSchema','true') \
.option('parserLib', 'univocity') \
.load(path, 'com.databricks.spark.csv')
现在,如果我执行任何操作,它就会爆炸。具体来说,如果我在本地计算机上执行以下操作:
table.count()
一切正常。
如果我启动ec2集群然后执行相同的操作,我会收到以下错误:
WARN [2016-03-25T05:29:02.061] org.apache.spark.scheduler.TaskSetManager:阶段3.0中丢失的任务0.0(TID 1519,ip-10-0-35-54.ec2.internal): java.lang.ClassCastException:java.lang.String无法强制转换为org.apache.spark.unsafe.types.UTF8String
然后......
ERROR [2016-03-25T05:29:05.554] org.apache.spark.scheduler.TaskSetManager:阶段3.0中的任务0失败了4次;中止工作
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.runJob.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 3.0 failed 4 times, most recent failure: Lost task 0.3 in stage 3.0 (TID 1522, ip-10-0-35-56.ec2.internal): java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.spark.unsafe.types.UTF8String
当我阅读其他avro文件时,一切都很完美。不知道发生了什么事。任何帮助将不胜感激。
注意,csv文件不是那么大。大约800K行。