2017-09-07 3 views
0

J'essaie de convertir les tables du serveur sql au format .csv via le code ci-dessous dans pyspark.Argument CLI avec spark-submit lors de l'exécution du fichier python

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") 

donc, si je veux convertir plusieurs tables, je dois écrire plusieurs données Frames.So, pour l'éviter, je voulais prendre argument de ligne de commande pour le nom de la base de données et le nom de la table des utilisateurs pendant l'itération sur la trame de données via la boucle for.

Est-ce encore possible? Si oui, quelqu'un peut-il me guider sur la façon de le faire grâce à spark-submit?

+0

passe à la fin de votre formation d'étincelles Soumettre la commande et la lire en utilisant 'sys.argv'? – philantrovert

Répondre

1

Il suffit de faire ce changement pour commander les étincelles et soumettre votre code:

test.py

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) 

commande Spark soumettre: spart-submit test.py <db_name> <table_name> <file_name>