{"action":"created","issue":{"url":"https://api.github.com/repos/apache/spark/issues/6159","labels_url":"https://api.github.com/repos/apache/spark/issues/6159/labels{/name}","comments_url":"https://api.github.com/repos/apache/spark/issues/6159/comments","events_url":"https://api.github.com/repos/apache/spark/issues/6159/events","html_url":"https://github.com/apache/spark/pull/6159","id":76504438,"number":6159,"title":"[SPARK-7251] Perform sequential scan when iterating over BytesToBytesMap","user":{"login":"JoshRosen","id":50748,"avatar_url":"https://avatars.githubusercontent.com/u/50748?v=3","gravatar_id":"","url":"https://api.github.com/users/JoshRosen","html_url":"https://github.com/JoshRosen","followers_url":"https://api.github.com/users/JoshRosen/followers","following_url":"https://api.github.com/users/JoshRosen/following{/other_user}","gists_url":"https://api.github.com/users/JoshRosen/gists{/gist_id}","starred_url":"https://api.github.com/users/JoshRosen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JoshRosen/subscriptions","organizations_url":"https://api.github.com/users/JoshRosen/orgs","repos_url":"https://api.github.com/users/JoshRosen/repos","events_url":"https://api.github.com/users/JoshRosen/events{/privacy}","received_events_url":"https://api.github.com/users/JoshRosen/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":16,"created_at":"2015-05-14T22:04:33Z","updated_at":"2015-05-18T23:42:12Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/apache/spark/pulls/6159","html_url":"https://github.com/apache/spark/pull/6159","diff_url":"https://github.com/apache/spark/pull/6159.diff","patch_url":"https://github.com/apache/spark/pull/6159.patch"},"body":"This patch modifies `BytesToBytesMap.iterator()` to iterate through records in the order that they appear in the data pages rather than iterating through the hashtable pointer arrays. This results in fewer random memory accesses, significantly improving performance for scan-and-copy operations.\r\n\r\nThis is possible because our data pages are laid out as sequences of `[keyLength][data][valueLength][data]` entries.  In order to mark the end of a partially-filled data page, we write `-1` as a special end-of-page length (BytesToByesMap supports empty/zero-length keys and values, which is why we had to use a negative length).\r\n\r\nThis patch incorporates / closes #5836."},"comment":{"url":"https://api.github.com/repos/apache/spark/issues/comments/103266829","html_url":"https://github.com/apache/spark/pull/6159#issuecomment-103266829","issue_url":"https://api.github.com/repos/apache/spark/issues/6159","id":103266829,"user":{"login":"AmplabJenkins","id":4031291,"avatar_url":"https://avatars.githubusercontent.com/u/4031291?v=3","gravatar_id":"","url":"https://api.github.com/users/AmplabJenkins","html_url":"https://github.com/AmplabJenkins","followers_url":"https://api.github.com/users/AmplabJenkins/followers","following_url":"https://api.github.com/users/AmplabJenkins/following{/other_user}","gists_url":"https://api.github.com/users/AmplabJenkins/gists{/gist_id}","starred_url":"https://api.github.com/users/AmplabJenkins/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AmplabJenkins/subscriptions","organizations_url":"https://api.github.com/users/AmplabJenkins/orgs","repos_url":"https://api.github.com/users/AmplabJenkins/repos","events_url":"https://api.github.com/users/AmplabJenkins/events{/privacy}","received_events_url":"https://api.github.com/users/AmplabJenkins/received_events","type":"User","site_admin":false},"created_at":"2015-05-18T23:42:12Z","updated_at":"2015-05-18T23:42:12Z","body":" Merged build triggered."}}