Spark 上的 Pandas 命令出错?
Posted
技术标签:
【中文标题】Spark 上的 Pandas 命令出错?【英文标题】:Error with Pandas command on Spark? 【发布时间】:2017-07-10 17:05:46 【问题描述】:首先我想说我是 Spark 的新手。我有一个需要在 Spark 上运行的 Pandas 工作程序。我正在使用 Databricks 来执行此操作。初始化 'sqlContext' 和 'sc' 后,我加载一个 CSV 文件并创建一个 Spark 数据框。完成此操作后,我将此数据帧转换为 Pandas 数据帧,我已经在其中编写了代码来完成我需要做的事情。
目标:我需要加载一个 CSV 文件并识别数据类型并返回每一列的数据类型。棘手的部分是日期有多种格式,为此我编写了(在这个社区的帮助下)正则表达式来匹配。我对每种数据类型都这样做。最后,我将列转换为正确的类型并打印每个列类型。
成功加载我的 Pandas 数据框后,我收到此错误:“TypeError: to_numeric() got an unexpected keyword argument 'downcast'”
我正在运行的代码触发了这个:
# Changing the column data types
if len(int_count) == len(str_count):
df[lst[col]] = pd.to_numeric(df[lst[col]], errors='coerce', downcast='integer')
if len(float_count) == len(str_count):
df[lst[col]] = pd.to_numeric(df[lst[col]], errors='coerce', downcast='float')
if len(boolean_count) == len(str_count):
df[lst[col]] = df[lst[col]].astype('bool')
if len(date_count) == len(str_count):
df[lst[col]] = pd.to_datetime(df[lst[col]], errors='coerce')
'lst' 是列标题,'col' 是我用来遍历列标题的变量。此代码在 PyCharm 上运行时运行良好。不知道为什么我在 Spark 上收到此错误。
任何帮助都会很棒!
【问题讨论】:
df
是熊猫数据框还是 Spark 数据框?错误发生在哪个确切的命令中?分享代码的更多细节不会有什么坏处……
@desertnaut df 是我的 Pandas 数据框。发现这是我第一个带有向下转换的命令,这是一个错误。我不想在这里发布我的整个代码,但我很乐意发布更多信息。
所以,这听起来像是一个与熊猫相关的问题 - 看不到 Spark 与它有什么关系(除了转换初始数据帧)。我建议尝试将初始数据直接加载到 pandas df - 如果您仍然遇到问题,它确实与 Spark 无关(无论如何,'pandas command on Spark' 并不是对您问题的准确描述)。
【参考方案1】:
来自您的 cmets:
我曾尝试将初始数据直接加载到 pandas df 中,但它一直给我一个错误,说该文件不存在,这就是为什么我必须在将其加载到 Spark 后对其进行转换。
所以,我的回答与 Spark 无关,只是将数据上传到 Databricks Cloud(社区版),这似乎是您真正的问题。
在初始化集群并上传文件user_info.csv
后,我们得到这个截图:
包括我们上传文件的实际路径。
现在,在 Databricks 笔记本中,如果您尝试在 pandas 中使用此确切路径,您将收到 File does not exist
错误:
import pandas as pd
pandas_df = pd.read_csv("/FileStore/tables/1zpotrjo1499779563504/user_info.csv")
[...]
IOError: File /FileStore/tables/1zpotrjo1499779563504/user_info.csv does not exist
因为,正如 instructions 明确提到的那样,在这种情况下(即,您希望直接在 pandas 或 R 中而不是 Spark 中加载的文件)您需要在文件路径前加上 /dbfs
:
pandas_df = pd.read_csv("/dbfs/FileStore/tables/1zpotrjo1499779563504/user_info.csv") # works OK
pandas_df.head() # works OK
【讨论】:
感谢您的回复!虽然我可以直接将它作为 Pandas 数据框上传,但我仍然遇到我最初提到的相同错误。我真的不知道该联系哪个社区,因为我有点迷茫为什么它不起作用。如果有帮助,这是我的完整代码:codesend.com/view/19783918ed48c5546829571fda051986 @rmahesh 所以,至少现在你知道这不是因为 Spark,所以可以说我的回答并非没有优点(你甚至可以投票赞成)。检查版本不兼容性(Databricks CE 运行 Python 2.7.12 和 pandas 0.18.1),如果错误仍然存在,请向 Databricks forums.databricks.com 提出问题 您的回答绝对有道理,我只是想提供所有信息。如果出现此错误,我会联系 Databricks,再次感谢您。 @rmahesh 你解决过这个问题吗?我遇到了同样的问题 @Kate 我不这么认为。以上是关于Spark 上的 Pandas 命令出错?的主要内容,如果未能解决你的问题,请参考以下文章
由Kaggle竞赛wiki文章流量预测引发的pandas内存优化过程分享