String Permutation Kick udf


Zied Hermi

Ich konvertiere ein Schwein-Skript mit Scala in Spark 1.6, ich habe einen Datenrahmen, der eine Zeichenfolge enthält, und ich möchte Zeichen in einer bestimmten Reihenfolge austauschen.
Beispiel:

+----------------+
|            Info|
+----------------+
|8106f510000dc502|
+----------------+

Ich möchte es in dieser Reihenfolge umwandeln [3,1,5,7,6,(8-16),4,2]

+----------------+
|            Info|
+----------------+
|08f150000dc50241|
+----------------+

Dies ist mein Schwein-UDF mit Java und es funktioniert:

public class NormalizeLocInfo extends EvalFunc<String>
{
    public String exec(Tuple input) throws IOException {
        if (input == null || input.size() == 0)
            return null;
        try{
            char [] ca = ((String)input.get(0)).toCharArray();
            return (
                    new StringBuilder().append(ca[3]).append(ca[0]).append(ca[5]).append(ca[7]).append(ca[6]).append(ca[8]).append(ca[9]).append(ca[10])
               .append(ca[11]).append(ca[12]).append(ca[13]).append(ca[14]).append(ca[15]).append(ca[16]).append(ca[4]).toString().toUpperCase()
               );
        }catch(Exception e){throw new IOException("UDF:Caught exception processing input row :"+input.get(0), e);}
    }
  }

Wie kann ich es mit scala auf Spark UDF ändern? Danke

Hund

So definieren Sie in Spark eine UDF-Funktion für Ihre Funktion

   import org.apache.spark.sql.functions._

    val exec = udf((input : String) => {
      if (input == null || input.trim == "") ""
      else {
        Try{
          val ca = input.toCharArray
          List(3,1,5,7,6,9,10,11,12,13,14,15,16,4,2).map(a=>ca(a-1)).mkString
        } match{
          case Success(data) => data
          case Failure(e)  =>
            println(e.printStackTrace())
            ""
        }
      }
    })

Sie können die Funktion mit withColumn() als verwenden

val dfNew = df.withColumn("newCol", exec($"oldCol"))

Hoffe das hilft

Verwandte Artikel


Kick UDF Zero Aktion

Raphael Roth Ich habe Probleme damit, Nullwerte in einer UDF zu verarbeiten, die mit einem Datenrahmen (der aus einer Hive-Tabelle stammt) arbeitet, der aus einer Struktur von Floats besteht: Der dataframe ( points) hat das folgende Schema: root |-- point: st

String-Permutation

Amir Ich habe folgenden Java-Code gefunden. Es zählt alle Permutationen eines Strings. Ich kann jedoch nicht verstehen, was es in der for-Schleife der Permutationsmethode tut. Genauer gesagt kann ich den Zweck des rem-Strings und des rekursiven Aufrufs nicht v

a Spark Scala String Matching UDF

Jin import org.apache.spark.sql.functions.lit val containsString = (haystack:String, needle:String) =>{ if (haystack.contains(needle)){ 1 } else{ 0 } } val containsStringUDF = udf(containsString _) val new_df = df.withColum

Hive UDF String to Date Konvertierung

chandra sekhar lagadapati Der Hive enthält eine Tabelle "sample" mit folgenden Daten: 15-06-2015 15-06-2015 15-06-2015 15-06-2015 15-06-2015 15-06-2015 16-06-2015 Mit der folgenden Abfrage konvertiere ich Daten vom Typ String in das Format Hive Date: select T

Frage zur String-Permutation mit Rekursion

Stanleyrr Dies hängt mit der Rekursion zusammen. s ist die Zeichenfolge 'abc'. Gibt alle Permutationen von s zurück. Die gewünschte Ausgabe lautet also: ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']. Aber ich habe Probleme, die Zeile im folgenden Code zu verstehe

Pandas - Generiere String-Permutation an einem festen Ort

vereinigtsaga Ich suche nach einer möglichen Permutation aus einer Zeichenfolge, so dass die Permutation nur an einem festen Ort stattfindet Beispielzeichenfolge - 'ABC|DE|F' Erwartetes Ergebnis: ABCE ABCF ABDE ABDF Sie können die Beispielzeichenfolge lesen,

String-Manipulation in Python udf für pyspark

RAM Ich versuche, mit dem folgenden Anwendungsfall zu codieren, habe aber nicht verstanden, wie man für eine bestimmte Anforderung in Python manipuliert Voraussetzung ist, wenn wir eine Zeichenfolge erhalten, wenn es AM oder PM hat, müssen wir die ganzen Zahle

Definieren Sie spark udf durch Reflektion auf einem String

Sourabh Ich versuche, ein udf in spark (2.0) aus einer Zeichenfolge zu definieren, die die Definition der Scala-Funktion enthält. Hier ist das Snippet: val universe: scala.reflect.runtime.universe.type = scala.reflect.runtime.universe import universe._ import

udf Für Type String ist kein TypeTag verfügbar

a.moussa Ich verstehe kein Funkenverhalten. Ich erstelle ein udf, das eine Ganzzahl wie unten zurückgibt import org.apache.spark.sql.SQLContext import org.apache.spark.{SparkConf, SparkContext} object Show { def main(args: Array[String]): Unit = { va