hive 使用pyspark计算配置单元表列表的行数

qyzbxkaa  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(144)

我创建了一个spark程序,它从一个Hive数据库中检索表名,然后计算单个表的行数。但是,我试图通过获取多个表的行数(从2个表开始)来提高这个程序的水平。
我的Spark代码是:

from pyspark.sql import SparkSession
import sys

def sql_count_rows(db,table):
    sql_query = """select count(*) from {0}.{1}""".format(db,table)
    return sql_query

db_name = sys.argv[1]

spark = SparkSession \
    .builder \
    .appName("HiveTableRecordCount") \
    .enableHiveSupport() \
    .getOrCreate()

spark.sql("use {0}".format(db_name))
tables_df=spark.sql("show tables").collect()
tables_df=tables_df[0:2] #filter the first two tables
print("list content: ",tables_df)
print("list length: ",len(tables_df))
queryBuilder=""

# queryBuilder=queryBuilder + """select count(*) from {0}.{1}""".format(tables_df['database'], tables_df['tableName'])

# print("queryBuilder: ",queryBuilder)

loop_length=1
index=0
while loop_length < len(tables_df):
    queryBuilder =  sql_count_rows(tables_df[index]['database'], tables_df[index]['tableName'])#tables_df.foreach(lambda row: sql_count_rows(row,queryBuilder))
    queryBuilder = queryBuilder + "\nunion all \n"
    loop_length+=1
    index+=1

spark.sql(queryBuilder).show()
spark.stop()

写这段代码的灵感来自this文章,* 用scala spark编写
当我执行程序时,我收到以下错误:
pyspark.sql.utils.ParseException:u”\n不匹配的输入“”应为{“(”、“选择”、“来源”、“值”、“表”、“Map”、“减少”}(第3行,位置0)\n\n== SQL ==\n从gr_mapping.active_contracts_stg_v2中选择计数(
)\n所有联合\n^^^\n”
你能帮我理解我做错了什么吗?

pn9klfpd

pn9klfpd1#

问题在于,在Scala中,String中的\n意味着变量中的一个新行,而在Python中则不是。
基本上,您可以在没有\n

queryBuilder = queryBuilder + " union all "```

相关问题