программирование pyspark с использованием main - PullRequest
0 голосов
/ 15 марта 2020

Я хочу, чтобы моя программа pyspark использовала функцию. Я сделал все под основной функцией, а затем попытался вызвать эту основную функцию. Но это не работает. У меня есть два фрейма данных.

+----+----+----+
|id  |name|marks|
+----+----+----+
|   1|   A|   1|
|   1|   A|   2|
|   1|   A|   3|
|   2|   B|   3|
|   2|   B|   5|
+----+----+----+


+----+----+----+
|id. |sub |mrks|
+----+----+----+
|   1|   A| 10|
|   1|   B| 20|
|   1|   C| 30|
|   2|   B| 35|
|   2|   C| 57|
+----+----+----+

Моя цель - прочитать фрейм данных и сохранить его в моем локальном

Мой код -

from __future__ import division,print_function
from pyspark.sql import functions as F
from pyspark.sql import types as T
import numpy as np
from pyspark.ml.feature import HashingTF, IDF, Normalizer
from collections import defaultdict as D
import datetime
from collections import Counter
import sys
import math
import pyspark
import time
import sys
from datetime import datetime
from math import exp

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('spark').config("spark.sql.session.timeZone", "GMT").getOrCreate()

def main(input_file, output_path, step):

    if step == 1:
        #read 1st dataframe
        df1 = spark.read.parquet(input_file)
        df1.write.parquet(output_path \
                                   ,mode="overwrite", compression="gzip")

    elif step == 2:
        df2 = spark.read.parquet(input_file)
        df2.write.parquet(output_path \
                                   ,mode="overwrite", compression="gzip")

if __name__ == '__main__':
    input_file = sys.argv[0]
    output_path = sys.argv[1]
    step = sys.argv[2]

input_file = "/Users/pallavi/Documents/project/test_data1.parquet/"
output_path = "/Users/pallavi/Documents/project/output/"
step = "2"

main(input_file, output_path, step)
...