【问题标题】:pyspark type error on reading a pandas dataframe读取熊猫数据框时出现pyspark类型错误
【发布时间】:2017-02-14 17:42:47
【问题描述】:

我将一些 CSV 文件读入 pandas,对其进行了很好的预处理并将 dtypes 设置为所需的 float、int、category 值。但是,当尝试将其导入 spark 时,出现以下错误:

Can not merge type <class 'pyspark.sql.types.DoubleType'> and <class 'pyspark.sql.types.StringType'>

在尝试追踪一段时间后,我找到了一些问题的来源 -> 查看 CSV 文件:

"myColumns"
""
"A"

red into pandas 喜欢:small = pd.read_csv(os.path.expanduser('myCsv.csv'))

并且未能将其导入以激发:

sparkDF = spark.createDataFrame(small)

目前我使用 Spark 2.0.0

可能有多个列受到影响。我该如何处理这个问题?

【问题讨论】:

  • 我确认这个问题在 2.0.1 中仍然存在

标签: python csv pandas apache-spark pyspark


【解决方案1】:

您需要明确定义 spark DataFrame 架构并将其传递给 createDataFrame 函数:

from pyspark.sql.types import *
import pandas as pd

small = pdf.read_csv("data.csv")
small.head()
#  myColumns
# 0       NaN
# 1         A
sch = StructType([StructField("myColumns", StringType(), True)])

df = spark.createDataFrame(small, sch)
df.show()
# +---------+
# |myColumns|
# +---------+
# |      NaN|
# |        A|
# +---------+

df.printSchema()
# root
# |-- myColumns: string (nullable = true)

【讨论】:

  • 所以不是从 pandas dtypes 推断出来的? :( 我明白了。
  • 无法最终确认这一点 --> 有几个字段受到影响。但是您的代码 sn-p 适用于最小示例。
  • 那你为什么不使用 spark-csv 包读取 csv 呢?
  • 好问题。我在 python 中清理了原始数据,并认为这会更容易。当我尝试在 spark 中读取数据时,最初出现了一些问题(原始数据)。当我在 scala 中使用 DataSets 加载数据时,我感到奇怪的是,所有列都已加载——即使我试图通过未将其指定为案例类中的属性来排除一些有问题的列。固定数据可以很好地加载到 spark 中,但尝试执行到 parquet 的转换,例如 mynewDf.write.parquet("myDf.parquet") 错误。
  • 我认为这个错误是由错误的dtype解释引起的,想通过pandas正确读取数据。但从长远来看,一切(尤其是 pandas 预处理)都应该转移到 scala / spark。
猜你喜欢
  • 2016-10-18
  • 2021-06-17
  • 1970-01-01
  • 2021-11-01
  • 2015-08-09
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
相关资源
最近更新 更多