【问题标题】:Spark DataFrame Unique On All Columns IndividuallySpark DataFrame 在所有列上都是唯一的
【发布时间】:2021-11-05 10:36:08
【问题描述】:

我想用 Spark SQL 和 DataFrame 复制 Pandas nunique 函数。我有以下内容:

%spark

import org.apache.spark.sql.functions.countDistinct
import org.apache.spark.sql.functions._ 

val df = spark.read
        .format("csv")
        .option("delimiter", ";")
        .option("header", "true") //first line in file has headers
        .load("target/youtube_videos.csv")
        
println("Distinct Count: " + df.distinct().count())
        
val df2 = df.select(countDistinct("likes"))
df2.show(false)

这有效并打印了喜欢列的唯一计数,如下所示:

Distinct Count: 109847
+---------------------+
|count(DISTINCT likes)|
+---------------------+
|27494                |
+---------------------+

如何在一个 SQL 中执行此操作,以便获得所有单独列的摘要?

【问题讨论】:

标签: scala apache-spark


【解决方案1】:

您可以轻松地迭代 DataFrame 中的所有列并收集结果,否则您也可以将其转换为 DataFrame

import pyspark.sql.functions as F


data = {"col1" : [np.random.randint(10) for x in range(1,10)],
    "col2" : [np.random.randint(100) for x in range(1,10)]}
mypd = pd.DataFrame(data)


sparkDF = sql.createDataFrame(mypd)

sparkDF.show()

+----+----+
|col1|col2|
+----+----+
|   4|  54|
|   2|  90|
|   4|  70|
|   4|  37|
|   7|  63|
|   8|  59|
|   0|  52|
|   2|  76|
|   7|  79|
+----+----+

迭代 DataFrame 列

sparkDF.select([F.countDistinct(F.col(c)).alias(c) for c in sparkDF.columns]).show()

+----+----+
|col1|col2|
+----+----+
|   5|   9|
+----+----+

【讨论】:

  • 那个 F 来自一些隐式导入吗?
  • @joesan 这是 Python。但是你应该能够在 Scala 中使用相同的策略。
  • @joesan- 更新了答案以包含导入语句,是的,同样可以与 scala 一起使用
【解决方案2】:

我能够得到我想要的结果,如下所示:

import org.apache.spark.sql.functions.countDistinct
import org.apache.spark.sql.functions.col
        
// Print the unique values for each column
df.select(df.columns.map(c => countDistinct(col(c)).alias(c)): _*).show(false)

上面的 sn-p 打印:

+-------------+----------+-----------+--------+-----------------+-----+-----+--------+--------+--------+--------------------+--------------------+--------------+
|channel_title|channel_id|video_title|video_id|video_upload_date|views|likes|dislikes|comments|age_days|likes_dislikes_ratio|comments_views_ratio|mean_views_day|
+-------------+----------+-----------+--------+-----------------+-----+-----+--------+--------+--------+--------------------+--------------------+--------------+
|127          |127       |108980     |109846  |109692           |86107|27494|5457    |7104    |5195    |69021               |100809              |109714        |
+-------------+----------+-----------+--------+-----------------+-----+-----+--------+--------+--------+--------------------+--------------------+--------------+

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 2021-12-12
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多