के साथ udf के लिए डेटा फ्रेम कॉलम और बाहरी सूची को पास करना मेरे पास निम्न संरचना के साथ स्पार्क डेटाफ्रेम है। BodyText_token में टोकन (संसाधित/शब्दों का सेट) है। और मैं परिभाषित कीवर्डकॉलम
root
|-- id: string (nullable = true)
|-- body: string (nullable = true)
|-- bodyText_token: array (nullable = true)
keyword_list=['union','workers','strike','pay','rally','free','immigration',],
['farmer','plants','fruits','workers'],['outside','field','party','clothes','fashions']]
मैं कितने टोकन प्रत्येक कीवर्ड सूची के अंतर्गत आते हैं की जाँच करें और मौजूदा dataframe का एक नया स्तंभ के रूप में परिणाम को जोड़ने के लिए की जरूरत के लिए एक आंतरिक सूची है। उदाहरण: यदि tokens =["become", "farmer","rally","workers","student"]
परिणाम होगा -> [1,2,0]
निम्न कार्य अपेक्षित के रूप में काम करता है।
def label_maker_topic(tokens,topic_words):
twt_list = []
for i in range(0, len(topic_words)):
count = 0
#print(topic_words[i])
for tkn in tokens:
if tkn in topic_words[i]:
count += 1
twt_list.append(count)
return twt_list
मैंने फ़ंक्शन तक पहुंचने के लिए कॉलम के साथ udf का उपयोग किया और मुझे एक त्रुटि मिली। मुझे लगता है कि यह एक udf को बाहरी सूची पास करने के बारे में है। क्या कोई तरीका है कि मैं बाहरी सूची और डेटाफ्रम कॉलम को udf पर पास कर सकता हूं और अपने डेटाफ्रेम में एक नया कॉलम जोड़ सकता हूं?
topicWord = udf(label_maker_topic,StringType())
myDF=myDF.withColumn("topic_word_count",topicWord(myDF.bodyText_token,keyword_list))
यह काम करता है लेकिन मैं इस के साथ सावधान रहना होगा, क्योंकि यूडीएफ 'topic_words होगा इस समय मूल्य udf परिभाषित किया गया था। तो 'topic_words' को बदलना और बाद में udf का पुनः उपयोग करना काम नहीं करेगा - यह अभी भी udf परिभाषित किए जाने पर 'topic_words' के मान का उपयोग करेगा। – CHP