pythonに貼り付けられていた既存のコードをpysparkに変換しました。Pysparkコードは、純粋なpythonの代替と比較しても十分にパフォーマンスがありません
Pythonコード:
import json
import csv
def main():
# create a simple JSON array
with open('paytm_tweets_data_1495614657.json') as str:
tweetsList = []
# change the JSON string into a JSON object
jsonObject = json.load(str)
#print(jsonObject)
# # print the keys and values
for i in range(len(jsonObject)):
tweetsList.insert(i,jsonObject[i]["text"])
#print(tweetsList)
displaySentiment(tweetsList)
def displaySentiment(tweetsList):
aDict = {}
from sentiment import sentiment_score
for i in range(len(tweetsList)):
aDict[tweetsList[i]] = sentiment_score(tweetsList[i])
print (aDict)
with open('PaytmtweetSentiment.csv', 'w') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames = ["Tweets", "Sentiment Value"])
writer.writeheader()
writer = csv.writer(csv_file)
for key, value in aDict.items():
writer.writerow([key, value])
if __name__ == '__main__':
main()
変換さPysparkコード:
import json
import csv
import os
from pyspark import SparkContext, SparkConf
from pyspark.python.pyspark.shell import spark
os.environ['PYSPARK_PYTHON'] = "/usr/local/bin/python3"
def main():
path = "/Users/i322865/DeepInsights/bitbucket-code/ai-engine/twitter-sentiment-analysis/flipkart_tweets_data_1495601666.json"
peopleDF = spark.read.json(path).rdd
df = peopleDF.map(lambda row: row['text'])
displaySentiment(df.collect())
def displaySentiment(tweetsList):
from sentiment import sentiment_score
aDict = sentiment_score(tweetsList)
#
with open('paytmtweetSentiment.csv', 'w') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames = ["Tweets", "Sentiment Value"])
writer.writeheader()
writer = csv.writer(csv_file)
for i in range(len(tweetsList)):
writer.writerow([tweetsList[i], aDict[i]])
print([tweetsList[i], aDict[i]])
if __name__ == '__main__':
conf = SparkConf().setAppName("Test").setMaster("local")
sc = SparkContext.getOrCreate(conf=conf)
main()
私は両方のプログラムを実行しましたが、大幅な性能向上を見ていません。私は何が欠けていますか?あなたはいくつかの考えを出すことができますか?
また、「reduce」も使用する必要がありますか?私は現在、「マップ」のみを使用しています。
このタイプの質問は、サイトには適していませんが、実際には、これはまだ悪いコードですが、正直言って、もちろん犯罪ではありません! Pysparkはプログラミング言語ではありません。一方、Pythonがあります。 – eliasah
@eliasah申し訳ありませんが、質問を修正しました。迅速なフィードバックをありがとう。 – coders
'df.collect()'を2回呼び出すのは当然のことながらパフォーマンスが低下します。すべてのレンダリングでそれを呼び出すことは、ほとんど役に立たないです。 –