执行 python 文件时带有 spark-submit 的 CLI 参数

use*_*180 0 python apache-spark pyspark spark-submit

我正在尝试通过 pyspark 中的以下代码将 sql server 表转换为 .csv 格式。

from pyspark import SparkContext
sc = SparkContext("local", "Simple App")
from pyspark.sql import SQLContext, Row
sqlContext = SQLContext(sc)

    df = sqlContext.read.format("jdbc").option("url","jdbc:sqlserver://server:port").option("databaseName","database").option("driver","com.microsoft.sqlserver.jdbc.SQLServerDriver").option("dbtable","table").option("user","uid").option("password","pwd").load()

    df.registerTempTable("test")
    df.write.format("com.databricks.spark.csv").save("full_path")
Run Code Online (Sandbox Code Playgroud)

所以,如果我想转换多个表,我需要编写多个数据帧。所以,为了避免它,我想在数据帧上迭代时为数据库名称和用户的表名采用命令行参数for 循环。

甚至有可能吗?如果是,有人可以指导我如何通过 spark-submit 进行操作吗?

小智 5

只需对 spark-submit 命令和您的代码进行此更改:

测试文件

import sys
from pyspark import SparkContext
sc = SparkContext("local", "Simple App")
from pyspark.sql import SQLContext, Row
sqlContext = SQLContext(sc)
db_name = sys.argv[1]
table_name = sys.argv[2]
file_name = sys.argv[3]
df = sqlContext.read.format("jdbc").option("url","jdbc:sqlserver://server:port").option("databaseName",db_name).option("driver","com.microsoft.sqlserver.jdbc.SQLServerDriver").option("dbtable",table_name).option("user","uid").option("password","pwd").load()

df.registerTempTable("test")
df.write.format("com.databricks.spark.csv").save(file_name)
Run Code Online (Sandbox Code Playgroud)

Spark提交命令: spart-submit test.py <db_name> <table_name> <file_name>