web-dev-qa-db-ja.com

pysparkデータフレームの文字列列がすべて数値かどうかを確認する方法

Dataframeの列を持つPySpark 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の作成は避けたいです。

4
cph_sto

簡単なキャストでうまくいきます:

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|
+-----+------+
7
Steven

必要に応じて、この目的でカスタム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)))
1
Manrique

これを試してください、Scala言語

spark.udf.register("IsNumeric", (inpColumn: Int) => BigInt(inpColumn).isInstanceOf[BigInt])
spark.sql(s""" select "ABCD", IsNumeric(1234) as IsNumeric_1  """).show(false)
0
Andy Quiroz