使用带有 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 实践是啥?