Github user mengxr commented on a diff in the pull request:
https://github.com/apache/spark/pull/5842#discussion_r29549052
--- Diff:
sql/core/src/main/scala/org/apache/spark/sql/execution/stat/StatFunctions.scala
---
@@ -77,4 +78,42 @@ private[sql] object StatFunctions {
})
counts.cov
}
+
+ /** Generate a table of frequencies for the elements of two columns. */
+ private[sql] def crossTabulate(df: DataFrame, col1: String, col2:
String): DataFrame = {
+ val tableName = s"${col1}_$col2"
+ val distinctCol2 = df.select(col2).distinct.orderBy(col2).collect()
--- End diff --
The first implementation uses multiple passes. We need two passes any way,
either on the original columns or on the pair counts. The latter may be better.
1. `val counts = select(col1, col2).rdd.countByValue().cache()`.
2. Get distinct values from col2:
`counts.map(_._1._2).distinct().collect()`. I'm not sure whether ordering by
counts is useful here.
3. GroupBy `col1` in `counts` and create an RDD of Row. And then apply the
schema.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]