我需要在DataFrame上定义自定义方法.有什么更好的方法呢?解决方案应该是可扩展的,因为我打算定义大量的自定义方法.
我当前的方法是MyClass使用DataFrameas参数创建一个类(比如说),在其中定义我的自定义方法(比如说customMethod)并定义一个转换DataFrame为的隐式方法MyClass.
implicit def dataFrametoMyClass(df: DataFrame): MyClass = new MyClass(df)
Run Code Online (Sandbox Code Playgroud)
因此,我可以打电话:
dataFrame.customMethod()
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?公开征求意见.
如何在任何嵌套级别上向结构添加或替换字段?
这个输入:
val rdd = sc.parallelize(Seq(
"""{"a": {"xX": 1,"XX": 2},"b": {"z": 0}}""",
"""{"a": {"xX": 3},"b": {"z": 0}}""",
"""{"a": {"XX": 3},"b": {"z": 0}}""",
"""{"a": {"xx": 4},"b": {"z": 0}}"""))
var df = sqlContext.read.json(rdd)
Run Code Online (Sandbox Code Playgroud)
产生以下模式:
root
|-- a: struct (nullable = true)
| |-- XX: long (nullable = true)
| |-- xX: long (nullable = true)
| |-- xx: long (nullable = true)
|-- b: struct (nullable = true)
| |-- z: long (nullable = true)
Run Code Online (Sandbox Code Playgroud)
然后我可以这样做:
import org.apache.spark.sql.functions._
val overlappingNames = Seq(col("a.xx"), …Run Code Online (Sandbox Code Playgroud) 我在spark中有以下数据框:
val test = sqlContext.read.json(path = "/path/to/jsonfiles/*")
test.printSchema
root
|-- properties: struct (nullable = true)
| |-- prop_1: string (nullable = true)
| |-- prop_2: string (nullable = true)
| |-- prop_3: boolean (nullable = true)
| |-- prop_4: long (nullable = true)
...
Run Code Online (Sandbox Code Playgroud)
我想做的是压扁这个数据帧,使其prop_1 ... prop_n存在于顶层.即
test.printSchema
root
|-- prop_1: string (nullable = true)
|-- prop_2: string (nullable = true)
|-- prop_3: boolean (nullable = true)
|-- prop_4: long (nullable = true)
...
Run Code Online (Sandbox Code Playgroud)
有几种类似问题的解决方案.我能找到的最好的就是这里.但是,只有properties …
我正在尝试使用pyspark在Spark数据框中删除一些嵌套的列。我为Scala找到了这个功能,它似乎完全可以满足我的要求,但是我对Scala并不熟悉,也不知道如何用Python编写它。
我真的很感谢您的帮助。
谢谢,