每次在python中迭代函数时,分别获取该函数的日志
我有一个pyspark脚本,如下所示。在这个脚本中,我在输入文件中循环查找表名并执行代码 现在我想在每次迭代函数mysql\u spark时分别收集日志 例如: 输入文件 现在,当我执行pyspark脚本时,我在一个文件中拥有所有三个表的日志 我想要的是3个单独的日志文件,每个表1个 Pyspark脚本: 调用pyspark脚本文件运行的Shell脚本每次在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 ] &
#!/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()