使用请求模块并返回对Pyspark Datafram的响应

2024-10-03 13:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调用一个API,它用两个键:值对。我目前通过两次不同的点击API并使用withColumn来保存对数据帧的响应键:值对而不是只访问一次API并同时保存两个键:值对马上。有人对如何正确地做这件事有指导吗?在

我的数据帧是一列,其中包含我发送给API的值:

   businessId
    dksldfaw2
    kkldsdok3
    djdfkdfk3
    23lksdlk8

JSON响应:

^{pr2}$

我的代码(调用API两次以解析一个响应):

def FirstVariableCode(businessId):
  response = api.query(id=businessId)
  x = response['FirstVariable'].encode('utf-8').strip()
  return x


def SecondVariableCode(businessId):
  response = api.query(id=businessId)
  y = response['SecondVariable'].encode('utf-8').strip()
  return y

FirstVariableCode = udf(FirstVariableCode, StringType())
SecondVariableCode = udf(SecondVariableCode, StringType())

df.withColumn('FirstVariable', FirstVariableCode(df.businessId))
df.withColumn('SecondVariable', SecondVariableCode(df.businessId))

我怎样才能点击一次API并将这两个值正确地保存到各自的列中呢?我觉得我把“withColumn”当作拐杖,做得不好。在

谢谢


Tags: 数据apiiddfresponsedefqueryutf
1条回答
网友
1楼 · 发布于 2024-10-03 13:31:00

您可以将两个udf函数组合为一个

def variableCodes(businessId):
    response = api.query(id=businessId)
    x = response['FirstVariable'].encode('utf-8').strip()
    y = response['SecondVariable'].encode('utf-8').strip()
    return (x, y)

from pyspark.sql import functions as F
from pyspark.sql import types as T
variableCodeUdf = F.udf(variableCodes, T.StructType([T.StructField("FirstVariable", T.StringType()), T.StructField('SecondVariable', T.StringType())]))

然后调用udf函数一次,然后使用*将通过调用udf函数创建的struct列扩展到单独的列中,如下所示:

^{pr2}$

这应该给你dataframe如下所示

+     +      -+       +
|businessId|FirstVariable|SecondVariable|
+     +      -+       +
|dksldfaw2 |x value1     |y1            |
|kkldsdok3 |x2           |y2            |
|djdfkdfk3 |x3           |y3            |
+     +      -+       +

我希望答案是有帮助的

注意:尽量使用内置函数,而不是udf函数

相关问题 更多 >