Apache spark pyspark createDataFrame没有一致的输出,强制无效类型的值变为无

Apache spark pyspark createDataFrame没有一致的输出,强制无效类型的值变为无,apache-spark,pyspark,apache-spark-sql,spark-dataframe,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,我们有两个系统都使用spark 1.6.1,但这两个系统对于以下代码有不同的输出: df = sqlContext.createDataFrame([('abcd',123)], ['col_A', 'col_B']) rdd = sc.parallelize([('abcd','123')]) a=sqlContext.createDataFrame(rdd, df.schema) a.collect() 第一个系统将无效字符串“123”更改为无,因为col_B的类型为int [Row(co

我们有两个系统都使用spark 1.6.1,但这两个系统对于以下代码有不同的输出:

df = sqlContext.createDataFrame([('abcd',123)], ['col_A', 'col_B'])
rdd = sc.parallelize([('abcd','123')])
a=sqlContext.createDataFrame(rdd, df.schema)
a.collect()
第一个系统将无效字符串“123”更改为无,因为col_B的类型为int

[Row(col_A=u'abcd', col_B=None)]
但第二个系统将引发一个例外

TypeError: LongType can not accept object in type <type 'str'>
TypeError:LongType无法接受类型中的对象

原因可能是什么?

在不了解更多信息的情况下,python 2.x和python 3.x之间可能存在明显的差异,或者是配置差异,您可以从检查df.printSchema()开始@EwanLeith和df.schema都是相同的,我们使用的是Python2.7。这种行为在1.4和1.5之间或1.5和1.6之间发生变化,因此如果您看到不一致的结果,很可能是由于一些配置问题。然而,在将数据推送到JVM之前,您应该始终键入check。一个系统使用标准python 2.7,而另一个系统使用anaconda python 2.7。有没有办法规范他们的行为?