anw*_*ian 4 python dataframe apache-spark apache-spark-sql pyspark
我正在处理不同的Spark DataFrames,在许多列中都有很多Null值。我想从每一列中获取任何一个非空值,以查看该值是否可以转换为日期时间。
我尝试这样做df.na.drop().first()是希望它将所有具有空值的行都删除,其余的DataFrame将仅具有所有非空值的第一行。但是,DataFrames许多列中有很多列具有大量null值,因此df.na.drop()返回empty DataFrame。
我还尝试查找任何列是否具有所有null值,以便在尝试上述方法之前可以简单地删除该列,但这仍然不能解决问题。我知道如何以高效的方式完成此操作,因为此代码将在large上多次运行DataFrames?
您可以将first函数与一起使用ingoreNulls。假设数据看起来像这样:
from pyspark.sql.types import StringType, StructType, StructField
schema = StructType([
StructField("x{}".format(i), StringType(), True) for i in range(3)
])
df = spark.createDataFrame(
[(None, "foo", "bar"), ("foo", None, "bar"), ("foo", "bar", None)],
schema
)
Run Code Online (Sandbox Code Playgroud)
您可以:
from pyspark.sql.functions import first
df.select([first(x, ignorenulls=True).alias(x) for x in df.columns]).first()
Run Code Online (Sandbox Code Playgroud)
from pyspark.sql.types import StringType, StructType, StructField
schema = StructType([
StructField("x{}".format(i), StringType(), True) for i in range(3)
])
df = spark.createDataFrame(
[(None, "foo", "bar"), ("foo", None, "bar"), ("foo", "bar", None)],
schema
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2358 次 |
| 最近记录: |