我创建了一个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”
你能帮我理解我做错了什么吗?
1条答案
按热度按时间pn9klfpd1#
问题在于,在Scala中,String中的
\n
意味着变量中的一个新行,而在Python中则不是。基本上,您可以在没有
\n
: