假设我有一个如下所示的数据框:
+--------------------+--------------------+--------------------------------------------------------------+
| id | Name | Payment|
+--------------------+--------------------+--------------------------------------------------------------+
| 1 | James |[ {"@id": 1, "currency":"GBP"},{"@id": 2, "currency": "USD"} ]|
+--------------------+--------------------+--------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
架构是:
根
|-- id: integer (nullable = true)
|-- Name: string (nullable = true)
|-- Payment: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
我怎样才能将上面的JSON数组分解为:
+--------------------+--------------------+-------------------------------+
| id | Name | Payment|
+--------------------+--------------------+-------------------------------+
| 1 | James | {"@id":1, "currency":"GBP"} |
+--------------------+--------------------+-------------------------------+
| 1 | James | {"@id":2, "currency":"USD"} |
+--------------------+--------------------+-------------------------------+
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用如下所示的爆炸功能,但它不起作用.它给出了一个关于无法分解字符串类型的错误,并且它需要一个映射或数组.这是有道理的,因为架构表示它是一个字符串,而不是数组/映射,但我不知道如何将其转换为适当的格式.
val newDF = dataframe.withColumn("nestedPayment", explode(dataframe.col("Payment")))
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏!
我正在尝试测试下面的登录方法,但似乎没有将data_provider_user保存到数据库。我已经使用调试器进行了检查,并且在离开方法并返回到rspec代码之前,它可以正常工作,如下所示。我还检查了对象是否使用.valid保存后是否有效?就是这样,我有点迷路了!
def login
require 'TwitterOauth'
@data_provider_user = DataProviderUser.find(params[:id])
if @data_provider_user.twitter?
@request_token = TwitterOauth.request_url
@data_provider_user.access_token = @request_token.token
@data_provider_user.oauth_token_secret = @request_token.secret
if @data_provider_user.save
debugger
redirect_to @request_token.authorize_url
end
end
end
Run Code Online (Sandbox Code Playgroud)
测试:
it "should update the tokens" do
require 'TwitterOauth'
TwitterOauth.stub(:request_url).and_return(@token)
debugger
get :login, {id: @data_provider_user.id}
debugger
@data_provider_user.access_token.should_not eq(nil)
@data_provider_user.oauth_token_secret.should_not eq(nil)
end
Run Code Online (Sandbox Code Playgroud)
调试器输出:
#<DataProviderUser id: 84, user_id: 63, data_provider_id: 63, username: nil, password: nil, created_at: "2013-02-19 15:21:59", updated_at: "2013-02-19 15:21:59", access_token: nil, update_frequency: nil, oauth_token_secret: nil>
#<DataProviderUser id: 84, user_id: 63, data_provider_id: 63, username: …Run Code Online (Sandbox Code Playgroud)