Created
February 15, 2017 15:07
-
-
Save cgrand/7a716327d1fad8db569c734cd3778b3f to your computer and use it in GitHub Desktop.
Retro-spec-ing a dataframe
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
=> (ns user (:require [powderkeg.sql :as sql] [clojure.spec :as s])) | |
=> (s/def ::age int?)(s/def ::name string?) (s/def ::friends (s/* ::name)) | |
:user/age | |
:user/name | |
:user/friends | |
=> (sql/df [{:name "Gaël" :age 6 :friends ["Alix"]} | |
{:name "Estelle" :age 4 :friends ["Léana"]} | |
{:name "Lilly" :age 1 :friends ["Tigger" "Cuddly"]}] | |
(s/keys :req-un [::name ::age ::friends])) | |
#object[org.apache.spark.sql.DataFrame 0x2f74149 "[name: string, age: bigint, friends: array<string>]"] | |
;; specs are preserved | |
=> (sql/spec-of *1) | |
(clojure.spec/keys | |
:req-un | |
[:user/name :user/age :user/friends]) | |
=> (.registerTempTable *2 "kids") | |
nil | |
;; even through manipulations | |
=> (sql/exec "select name as `first-name`, age, size(friends) as `friends-count` from kids") | |
#object[org.apache.spark.sql.DataFrame 0x2d2d9b26 "[first-name: string, age: bigint, friends-count: int]"] | |
=> (sql/spec-of *1) | |
(clojure.spec/merge | |
(clojure.spec/keys | |
:req-un | |
[:user/age]) | |
(powderkeg.sql/adhoc-map | |
:first-name | |
:user/name | |
:friends-count | |
clojure.core/int?)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment