как проверить, является ли строковый столбец в фрейме данных pyspark полностью числовым - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть PySpark Dataframe со столбцом strings.Как я могу проверить, какие строки в нем являются числовыми.Я не смог найти ни одной функции в официальной документации PySpark -

values = [('25q36',),('75647',),('13864',),('8758K',),('07645',)]
df = sqlContext.createDataFrame(values,['ID',])
df.show()
+-----+
|   ID|
+-----+
|25q36|
|75647|
|13864|
|8758K|
|07645|
+-----+

В Python есть функция .isDigit(), которая возвращает True или False, если stringсодержит только цифры или нет.

Ожидаемый фрейм данных -

+-----+-------+
|   ID| Value |
+-----+-------+
|25q36| False |
|75647| True  |
|13864| True  |
|8758K| False |
|07645| True  |
+-----+-------+

Я бы хотел избежать создания UDF.

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Если вы хотите, вы также можете создать пользовательский udf для этой цели:

from pyspark.sql.types import BooleanType
from pyspark.sql import functions as F

def is_digit(val):
    if val:
        return val.isdigit()
    else:
        return False

is_digit_udf = udf(is_digit, BooleanType())

df = df.withColumn('Value', F.when(is_digit_udf(F.col('ID')), F.lit(True)).otherwise(F.lit(False)))
0 голосов
/ 21 августа 2019

Попробуйте, это язык Scala

spark.udf.register ("IsNumeric", (inpColumn: Int) => BigInt (inpColumn) .isInstanceOf [BigInt]) spark.sql (s "" "выберите "ABCD", IsNumeric (1234) как IsNumeric_1 "" ") .show (false)

0 голосов
/ 12 декабря 2018

Простое приведение сделало бы работу:

from pyspark.sql import functions as F

my_df.select(
  "ID",
  F.col("ID").cast("int").isNotNull().alias("Value ")
).show()

+-----+------+
|   ID|Value |
+-----+------+
|25q36| false|
|75647|  true|
|13864|  true|
|8758K| false|
|07645|  true|
+-----+------+
...