首页 文章

Spark上的Pandas命令出错?

提问于
浏览
0

我想在序言中说我对Spark很新 . 我有一个关于Pandas的工作程序,我需要在Spark上运行 . 我正在使用Databricks来做到这一点 . 初始化'sqlContext'和'sc'后,我加载一个CSV文件并创建一个Spark数据帧 . 在这之后,我将这个数据帧转换为Pandas数据帧,在那里我已经编写了代码来完成我需要做的事情 .

目标:我需要加载CSV文件并识别数据类型并返回每列的数据类型 . 棘手的部分是日期有多种格式,我已经编写了(在这个社区的帮助下)正则表达式来匹配 . 我为每种数据类型执行此操作 . 最后,我将列转换为正确的类型并打印每个列类型 .

在成功加载我的Pandas数据帧后,我收到此错误:“TypeError:to_numeric()得到一个意外的关键字参数'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'是列 Headers ,'col'是我用来迭代列 Headers 的变量 . 在PyCharm上运行时,此代码运行良好 . 不知道为什么我在Spark上遇到这个错误 .

任何帮助都会很棒!

1 回答

  • 1

    从你的评论:

    我试图将初始数据直接加载到pandas df中,但它一直让我犯了一个错误,说该文件不存在,这就是为什么我必须在将它加载到Spark后转换它 .

    所以,我的答案与Spark无关,只是将数据上传到Databricks Cloud(社区版),这似乎是你真正的问题 .

    初始化集群并上传文件 user_info.csv 后,我们将获得此屏幕截图:

    enter image description here

    包括我们上传文件的实际路径 .

    现在,在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
    

相关问题