提问人:Guillermo Colom 提问时间:11/20/2022 最后编辑:Andreas HauserGuillermo Colom 更新时间:11/28/2022 访问量:91
数据库中的表列表
List of tables in a Database
问:
我实现了 DataFrame 的 DataFrame,其中包含 Databricks 数据库中所有表的所有列及其类型。
数据库 | 桌子 | 列 | 列类型 |
---|---|---|---|
违约 | 表1 | 列 1 | 字符串 |
违约 | 表1 | 列 2 | 布尔 |
违约 | 表2 | 第 3 列 | 整数 |
违约 | 表2 | 第 4 列 | 字符串 |
违约 | 表2 | 专栏 5 | 字符串 |
谁能帮我添加两个额外的列,一列指示每个表中每列的空值数,另一列指示每个表中每列的空值的百分比?
数据库 | 桌子 | 列 | 列类型 | 空值 | 百分比 |
---|---|---|---|---|---|
违约 | 表1 | 列 1 | 字符串 | 345 | 5% |
违约 | 表1 | 列 2 | 布尔 | 0 | 0% |
违约 | 表2 | 第 3 列 | 整数 | 98760 | 90% |
违约 | 表2 | 第 4 列 | 字符串 | 56721 | 52% |
违约 | 表2 | 专栏 5 | 字符串 | 1512 | 1% |
提前致谢!
Python 代码:
table_name = 'table1'
df = spark.sql("SELECT * FROM {}".format(table_name))
col_null_cnt_df = df.select([count(when(col(c).isNull(),c)).alias(c) for c in df.columns])
col_null_cnt_df.show()
答:
0赞
Saideep Arikontham
11/28/2022
#1
- 我的 2 个表中有以下数据。
t1 and t2
- 以下是我在数据帧中获取数据的方式:
- 我使用以下代码来获得所需的输出。首先,我创建了 2 列,其中包含各自的查询:
from pyspark.sql.functions import lit,col,concat_ws
df = df.withColumn('count_of_nulls',concat(lit('select * from '),concat_ws('.',*['Database','Table']),lit(' where isnull('),col('Column'),lit(')')))
df = df.withColumn('no_of_rows',concat(lit('select * from '),concat_ws('.',*['Database','Table'])))
- 现在,我在 spark API 上将此数据帧转换为 pandas 数据帧,以使用循环执行相应的操作并更新数据帧:
pdf = df.to_pandas_on_spark()
#pdf
null_count = []
total_count = []
for i in pdf['count_of_nulls'].to_numpy():
null_count.append(spark.sql(i).count())
for i in pdf['no_of_rows'].to_numpy():
total_count.append(spark.sql(i).count())
print(null_count,total_count)
pdf['count_of_nulls'] = null_count
pdf['no_of_rows'] = total_count
#pdf
- 我将其转换回pyspark数据帧,然后计算百分比。
df = pdf.to_spark()
df.withColumn('percentage_of_nulls', col('count_of_nulls')/col('no_of_rows')*100).show()
评论