繁体   English   中英

pandas to_csv function 从 Spark UDF 调用时不写入 Blob 存储

[英]pandas to_csv function not writing to Blob Storage when called from Spark UDF

我正在使用 Spark UDF 从 GET 端点读取一些数据并将它们作为 CSV 文件写入 Azure BLOB 位置。

我的 GET 端点采用 2 个查询参数,param1 和 param2。 所以最初,我有一个 dataframe paramDF,它有两列 param1 和 param2。

param1   param2
12        25
45        95

Schema:    paramDF:pyspark.sql.dataframe.DataFrame
           param1:string
           param2:string

现在我写了一个接受这两个参数的UDF,注册它,然后为dataframe中的每一行调用这个UDF。UDF如下:

    def executeRestApi(param1,param2):
      dlist=[]
      try:
        print(DataUrl.format(token=TOKEN, q1=param1,q2=param2))
        response=requests.get(DataUrl.format(token=TOKEN, oid=param1,wid=param2))
        if(response.status_code==200):
          metrics=response.json()['data']['metrics']
          dic={}
          dic['metric1'] = metrics['metric1']
          dic['metric2'] = metrics['metric2']
          dlist.append(dic)
        
    pandas.DataFrame(dlist).to_csv("../../dbfs/mnt/raw/Important/MetricData/listofmetrics.csv",header=True,index=False,mode='x')
    return "Success"
          
   except Exception as e:
        return "Failure"

注册 UDF:

udf_executeRestApi = udf(executeRestApi, StringType())

最后以这种方式调用 UDF

paramDf.withColumn("result",udf_executeRestApi(col("param1"),col("param2"))

我在调用 UDF 时没有看到任何错误,实际上 UDF 正确返回值“Success”。 唯一的问题是文件没有写入 Azure BLOB 存储,无论我尝试什么。 UDF' 主要用于自定义功能(并返回一个值)。但是,就我而言,我正在尝试使用 UDF 执行 GET API 调用和写入操作(这是我的主要意图)。

我的 pandas.DataFrame().tocsv() 没有问题,因为同一行,当单独尝试时,使用一个简单的列表正确地将数据写入 BLOB。

这里可能出了什么问题?

注意:Env 是 Databricks 上的 Spark。 缩进没有任何问题,尽管它在这里看起来不整洁。

尝试在 dataframe 上调用display

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM