मैं pyspark संस्करण 2.4 का उपयोग कर रहा हूं और मैं एक udf लिखने की कोशिश कर रहा हूं जो कॉलम id1 और कॉलम id2 के मानों को एक साथ लेना चाहिए, और इसके रिवर्स स्ट्रिंग को वापस कर देता है।

उदाहरण के लिए, मेरा डेटा इस तरह दिखता है:

+---+---+
|id1|id2|
+---+---+
|  a|one|
|  b|two|
+---+---+

संबंधित कोड है:

df = spark.createDataFrame([['a', 'one'], ['b', 'two']], ['id1', 'id2'])

लौटाया गया मान होना चाहिए

+---+---+----+
|id1|id2| val|
+---+---+----+
|  a|one|enoa|
|  b|two|owtb|
+---+---+----+

मेरा कोड है:

@udf(string)
def reverse_value(value):
  return value[::-1]

df.withColumn('val', reverse_value(lit('id1' + 'id2')))

मेरी त्रुटियां हैं:

TypeError: Invalid argument, not a string or column: <function 
reverse_value at 0x0000010E6D860B70> of type <class 'function'>. For
column literals, use 'lit', 'array', 'struct' or 'create_map'
function.
0
SkyOne 19 जून 2019, 13:16

2 जवाब

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

होना चाहिए:

from pyspark.sql.functions import col, concat

df.withColumn('val', reverse_value(concat(col('id1'), col('id2'))))

व्याख्या:

इसके अतिरिक्त यह स्पष्ट नहीं है कि udf का तर्क सही है या नहीं। यह या तो होना चाहिए:

from pyspark.sql.functions import udf

@udf
def reverse_value(value):
    ...

या

@udf("string")
def reverse_value(value):
    ...

या

from pyspark.sql.types import StringType

@udf(StringType())
def reverse_value(value):
    ...

इसके अतिरिक्त स्टैकट्रेस से पता चलता है कि आपके कोड में कुछ अन्य समस्याएं हैं, जो आपके द्वारा साझा किए गए स्निपेट के साथ पुन: उत्पन्न नहीं हो सकती हैं - ऐसा लगता है कि reverse_value function वापस आ गया है।

0
user11669673 19 जून 2019, 13:26

@user11669673 का उत्तर बताता है कि आपके कोड में क्या गलत है और udf को कैसे ठीक किया जाए। हालांकि, इसके लिए आपको udf की आवश्यकता नहीं है।

आप बेहतर प्रदर्शन हासिल करेंगे। .apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.functions.reverse" rel="nofollow noreferrer">pyspark.sql.functions.reverse:

from pyspark.sql.functions import col, concat, reverse
df.withColumn("val", concat(reverse(col("id2")), col("id1"))).show()
#+---+---+----+
#|id1|id2| val|
#+---+---+----+
#|  a|one|enoa|
#|  b|two|owtb|
#+---+---+----+
1
pault 19 जून 2019, 17:08