使用带有 python 公式的 Databricks 数据框创建一个新的计算字段写回 sql 表

Posted

技术标签:

【中文标题】使用带有 python 公式的 Databricks 数据框创建一个新的计算字段写回 sql 表【英文标题】:Using a Databricks dataframe with python formula to create a new calculated field write back to sql table 【发布时间】:2021-09-04 04:53:22 【问题描述】:

我正在使用 Databricks 在 spark.sql 中构建我的数据集,现在我的数据框已格式化。我现在想创建一个新列并将 python 公式应用于此数据框,然后最终将此数据框写入表。

我尝试了几种方法,但需要一些帮助才能成功。

Databricks (python notebook) - 数据集

%python
df_my_dataframe.createOrReplaceTempView("MyTable")

from scipy.stats import norm, chi2
def z(variable1, prob):
  if variable1 < 400:
  z_calc = [i for i in range (0,500) if chi2.sf(2 * variable1, 2 * i + 2) >= prob][0]  
else:
  z_calc = int(norm.ppf(prob,variable1,sqrt(variable1)))
return z_calc

df = spark.sql("select * from MyTable")
something = udf(lambda x: z(x['variable1'], x['prob']))

df = df.withColumn('test',something('variable1','prob'))
df.write.mode("overwrite").saveAsTable("MyDB.MyTable")

【问题讨论】:

预期输出是什么? 我希望使用新的计算字段(函数 z)向 MyTable df 添加一个新列。例如一个 |乙| C = MyTable 我想要 A |乙| C |东西|其中某事是跨行的计算字段,我在公式中使用变量 A 和 B 【参考方案1】:

好的,设法解决了。是 udf 把我扔了。

from scipy.stats import norm, chi2
import pyspark.sql.functions as f
from pyspark.sql.types import *

def fun_z(variable1, prob):
 if variable1 < 400:
z_calc = [i for i in range (0,500) if chi2.sf(2 * variable1, 2 * i + 2) >= prob] 
[0]  
 else:
z_calc = int(norm.ppf(prob,variable1,sqrt(variable1)))
return z_calc

df = spark.sql("select * from MyTable")

z_calc = f.udf(fun_z, IntegerType())

df = 
 df.withColumn("z_cal",z_calc('name_of_column_in_MyTable_variable1','name_of_column_in_MyTable_prob'))

【讨论】:

以上是关于使用带有 python 公式的 Databricks 数据框创建一个新的计算字段写回 sql 表的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Databrick/PySpark 覆盖/更新 Azure Cosmos DB 中的集合

从 databrick 在 adls gen 1 中写入 tsv 文件时行分隔符更改

基于在 DataBrick 中的笔记本顶部提取小部件值来动态检索/过滤 Spark 框架的最佳 PySpark 实践是啥?

是否可以使用带有魔术命令的 Azure Synapse 在 Apache Spark 中运行 Bash 命令

使用 NSPredicate 解析带有变量的公式

在带有变量的javascript中使用haversine公式