मेरे पास निम्नलिखित स्कीमा के साथ एक डेटा फ्रेम है:

मेरी आवश्यकता उन पंक्तियों को फ़िल्टर करना है जो किसी भी पता सरणी तत्वों में शहर जैसे फ़ील्ड से मेल खाते हैं। मैं loyaltyMember.address[0].city जैसे अलग-अलग फ़ील्ड तक पहुंच सकता हूं, लेकिन मुझे यह देखने के लिए सभी पता सरणी तत्वों की जांच करनी है कि कोई मिलान मौजूद है या नहीं। मैं इसे स्पार्क एसक्यूएल में कैसे प्राप्त कर सकता हूं, मैं array_contains फ़ंक्शन का उपयोग नहीं कर सका क्योंकि सरणी जटिल प्रकार की है

root
 |-- loyaltyMember: struct (nullable = true)
 |    |-- Name: string (nullable = true)
 |    |-- address: array (nullable = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- addressType: string (nullable = true)
 |    |    |    |-- city: string (nullable = true)
 |    |    |    |-- countryCode: string (nullable = true)
 |    |    |    |-- postalCode: string (nullable = true)
 |    |    |    |-- street: string (nullable = true)
2
Despicable me 5 सितंबर 2019, 21:03

1 उत्तर

सबसे बढ़िया उत्तर

मेरा मानना ​​​​है कि आप अभी भी array_contains का उपयोग इस प्रकार कर सकते हैं (PySpark में):

from pyspark.sql.functions import col, array_contains

df.filter(array_contains(col('loyaltyMember.address.city'), 'Prague'))

यह उन सभी पंक्तियों को फ़िल्टर करेगा जो सरणी कॉलम city तत्व 'प्राग' में हैं।

12
David Vrba 5 सितंबर 2019, 20:44