удалить первые n символов в столбце данных psypark - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь удалить первые два символа в столбце для каждой строки в моем фрейме данных Pyspark.Длина следующих символов отличается, поэтому я не могу использовать решение с substring .

пример фрейма данных:

columns = ['text']
vals = [(h0123),(b012345), (xx567)]

РЕДАКТИРОВАТЬ на самом деле проблема усложняется, так как иногда у меня есть буква и два нуля в качестве первых символов, а затем необходимо удалить оба0.

Пример:

columns = ['text']
vals = [(h0123),(b012345), (x00567), (L0034)]

Ожидаемый результат:

(123),(12345), (567), (34)

1 Ответ

0 голосов
/ 28 февраля 2019

Вы можете использовать pyspark.sql.functions.expr() для вызова substring и передать длину строки минус n в качестве аргумента len.

from pyspark.sql.functions import expr

n = 2
df.withColumn(
    "new_text",
    expr("substring(text, {n}+1, length(text)-{n})".format(n=n))
).show()
#+-------+--------+
#|   text|new_text|
#+-------+--------+
#|  h0123|     123|
#|b012345|   12345|
#|  xx567|     567|
#+-------+--------+

Вы также можете превратить это в функцию:

def lstrip(column, n):
    # should probably add error checking on inputs
    return expr("substring(`{col}`, {n}+1, length(`{col}`)-{n})".format(col=column, n=n))

df.withColumn("new_text", lstrip(column="text", n=n)).show()
# Same as above
...