Реализация логики Informatica в искре - PullRequest
0 голосов
/ 24 июня 2018

Как мы можем реализовать приведенную ниже логику в искре?

Если значение столбца равно нулю, оно должно вернуть '' Если ltrim (rtrim (column)) равен нулю, он должен вернуть '' Иначе оно должно заполнить значение этого столбца

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

df=df.withColumn("new_col",when(col("old_col").isNull(),"").otherwise(col("old_col")))

предпочитаю DF, а не rdd, так как он требует оптимизации под капотом

https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html

0 голосов
/ 24 июня 2018

Я не pyspark, но если вы посмотрите на примеры ниже в Scala и

  1. посмотрите на лямбда-подход pyspark и отсутствие val, если я правильно помню
  2. и напишите свое собственное определение, как если бы вы выполняли многократное преобразование в Informatica

, тогда вы сможете двигаться вперед.Я предоставляю несколько способов обрезки и, если еще, с картой в RDD.

3 строки, чтобы показать общие принципы:

val rdd = sc.parallelize(List((" aaa", "x"), ("bbbb ", "y"), (" cc ", "z"), ("gggg  ", " a"), ("    ", "b")))
val rdd2 = rdd.map{ case (field1, field2) => ( field1.replaceAll(" ", ""), field1.trim, field1, field2) }
val rdd3 = rdd2.map{ case (field1, field2, field3, field4) => (field1.replaceAll(" ", ""), if (field1.trim == "") " "  else field1 , field3, field4) }
...