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
の作成は避けたいです。
簡単なキャストでうまくいきます:
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|
+-----+------+
必要に応じて、この目的でカスタム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)))
これを試してください、Scala言語
spark.udf.register("IsNumeric", (inpColumn: Int) => BigInt(inpColumn).isInstanceOf[BigInt])
spark.sql(s""" select "ABCD", IsNumeric(1234) as IsNumeric_1 """).show(false)