每次在python中迭代函数时,分别获取该函数的日志

每次在python中迭代函数时,分别获取该函数的日志,python,linux,bash,pyspark,Python,Linux,Bash,Pyspark,我有一个pyspark脚本,如下所示。在这个脚本中,我在输入文件中循环查找表名并执行代码 现在我想在每次迭代函数mysql\u spark时分别收集日志 例如: 输入文件 现在,当我执行pyspark脚本时,我在一个文件中拥有所有三个表的日志 我想要的是3个单独的日志文件,每个表1个 Pyspark脚本: 调用pyspark脚本文件运行的Shell脚本 #!/bin/bash source /home/$USER/mysql_spark/source.sh [ $# -ne 1 ] &

我有一个pyspark脚本,如下所示。在这个脚本中,我在输入文件中循环查找表名并执行代码

现在我想在每次迭代函数mysql\u spark时分别收集日志

例如:

输入文件

现在,当我执行pyspark脚本时,我在一个文件中拥有所有三个表的日志

我想要的是3个单独的日志文件,每个表1个

Pyspark脚本:

调用pyspark脚本文件运行的Shell脚本

#!/bin/bash

source /home/$USER/mysql_spark/source.sh
[ $# -ne 1 ] && { echo "Usage : $0 table ";exit 1; }

args_file=$1

TIMESTAMP=`date "+%Y-%m-%d"`
touch /home/$USER/logs/${TIMESTAMP}.success_log
touch /home/$USER/logs/${TIMESTAMP}.fail_log
success_logs=/home/$USER/logs/${TIMESTAMP}.success_log
failed_logs=/home/$USER/logs/${TIMESTAMP}.fail_log

#Function to get the status of the job creation
function log_status
{
       status=$1
       message=$2
       if [ "$status" -ne 0 ]; then
                echo "`date +\"%Y-%m-%d %H:%M:%S\"` [ERROR] $message [Status] $status : failed" | tee -a "${failed_logs}"
                exit 1
                else
                    echo "`date +\"%Y-%m-%d %H:%M:%S\"` [INFO] $message [Status] $status : success" | tee -a "${success_logs}"
                fi
}

spark-submit --name "${args_file}" --master "yarn-client" /home/$USER/mysql_spark/mysql_spark.py ${args_file} ${hivedb} ${mysqldb} ${mysqltable} 

g_STATUS=$?
log_status $g_STATUS "Spark job ${args_file} Execution"
示例日志文件:

预期产量

表1.1日志文件

表2.1日志文件

表3.1日志文件

我怎样才能做到这一点


可以这样做吗?

您可以为每次迭代创建新文件并将数据写入其中

这是一个简单的例子:

lis =['table1','table2']

for table in lis:
    logfile = open(str(table)+".logfile",'w')
    logfile.write(str(table))
    logfile.close()
在您的代码中,如果您实现了相同的概念,并且在每次迭代中都将file对象传递给mysql\u spark函数,那么它应该可以工作

for table in input:
    logfile = open(str(table)+".logfile",'w')
    mysql_spark(table, hivedb, mysqldb, mysqltable, logfile)
    logfile.close()

使用您的代码,我可以创建日志文件,但文件是空的,没有日志信息。是的,但是您有文件对象,您可以检查条件并在该文件对象中写入所需内容。例如:df=sqlContext.table{}.{}.formatmysqldb,mysqltable如果df:logfile.writeSql Context已创建,则为mysqltable。else:未创建logfile.writeSql上下文。类似这样的。实际上,在日志文件中,我希望有控制台输出。
Connection to spark
***************************table = table 1 ********************************
created dataframe
created table
delete temp directory
***************************table = table 2 ********************************
created dataframe
created table
delete temp directory
***************************table = table 3 ********************************
created dataframe
created table
delete temp directory
Connection to spark
***************************table = table 1 ********************************
created dataframe
created table
delete temp directory   
***************************table = table 1 ********************************
created dataframe
created table
delete temp directory   
***************************table = table 1 ********************************
created dataframe
created table
delete temp directory
shutdown sparkContext   
lis =['table1','table2']

for table in lis:
    logfile = open(str(table)+".logfile",'w')
    logfile.write(str(table))
    logfile.close()
for table in input:
    logfile = open(str(table)+".logfile",'w')
    mysql_spark(table, hivedb, mysqldb, mysqltable, logfile)
    logfile.close()